Arduino烧录ESP8266模块,实现WiFi通信,连接OneNET平台(一)

版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/m0_37738838/article/details/83999561

硬件要求:
1.esp8266-01模块 1-n个
2.双头杜邦线若干
3.arduino uno开发板或者同类开发板。
软件要求:
1.arduino ide

安装ESP8266开发板软件包
使用1.6.4及以上版本的Arduino, 打开Arduino IDE,打开 文件->首选项 在 附加开发板管理器网址 一栏写入:
http://arduino.esp8266.com/package_esp8266com_index.json
添加完以后点击 好。
做完这步以后重启Arduino IDE,然后依次点击 工具->开发板->开发板管理 点击并安装。
安装完后重启Arduino IDE,然后依次点击 工具->开发板->NodeMCU 1.0 (ESP-12E Module),接着按照下面的信息在工具栏找到对应项进行配置
Upload Using: Serial
CPU Frequency: 80 MHz
Flash Size: 4M (3M SPIFFS)
Upload Speed: 115200
Port: 对应的USB 端口 (当你一将Arduino连接电脑时,在设备管理器中会冒出端口号)
其他的设置就按照默认的选择不变

在这里插入图片描述

图6-1 开发板配置

连接烧写
移除了ATmega芯片的Arduino开发板做为固件烧写工具

在这里插入图片描述

图6-2 ESP8266电路
8266对应的针脚如上所示。

烧录模式下:
将UTXD接到串口模块的TX上,
CH_PD和VCC接3.3V
GND和GPIO0接GND
其余脚无视即可。
注意,这里烧录模式,如果要工作的话请将GPIO0脚悬空,即断开,否则设备不会正常工作!

点击上传,将ESP8266模块程序设计中的程序烧录进8266芯片中,烧录时模块和8266上的蓝灯会狂闪一阵,编译速度会比arduino慢一些,耐心等待。

当看到Arduino IDE底部提示“上传结束”的信息,这时候把GPIO0拔掉,然后代码就会开始运行。

在这里我们配置8266模块连接的WiFi,WiFi名是test,密码是12345678,连接服务器IP是183.230.40.33,端口是80。我们这连接的IP就是OneNET平台,为后续基于arduino开发物联网作品做准备

下载时可能出现的问题:
1.下载出错,可能是供电问题,或者是串口模块数据传输有问题
2.卡着不动,重启一下8266,烧写模式时GPIO0接地。
3.正确的下载的情况是ide通知栏是一串小点在增加,最后显示下载成功

程序下载:https://download.csdn.net/download/m0_37738838/10780723

ESP8266模块程序设计:


#include <ESP8266WiFi.h>

const char *ssid     = "test";//这里写入网络的ssid
const char *password = "12345678";//wifi密码
const char *host = "183.230.40.33";//修改为Server服务端的IP,即你电脑的IP,确保在同一网络之下。

WiFiClient client;
const int tcpPort = 80;//修改为你建立的Server服务端的端口号,此端口号是创建服务器时指定的。


void setup()
{
    Serial.begin(115200);    
    pinMode(led,OUTPUT);
    delay(10);
    Serial.println();
    Serial.print("Connecting to ");//会通过usb转tll模块发送到电脑,通过ide集成的串口监视器可以获取数据。
    Serial.println(ssid);

    WiFi.begin(ssid, password);//启动

     //在这里检测是否成功连接到目标网络,未连接则阻塞。
    while (WiFi.status() != WL_CONNECTED)
    {
        delay(500);
    }

 //几句提示
    Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
    
}


void loop()
{
    while (!client.connected())//若未连接到服务端,则客户端进行连接。
    {
        if (!client.connect(host, tcpPort))//实际上这一步就在连接服务端,如果连接上,该函数返回true
        {
            Serial.println("connection....");
            delay(500);

        }
    }

    while (client.available())//available()表示是否可以获取到数据
    {
      //控制led
//        char val = client.read();//read()表示从网络中读取数据。
//        if(val=='a'){//pc端发送a和b来控制
//           digitalWrite(led, LOW);
//        }
//        if(val=='b')
//        {
//            digitalWrite(led, HIGH);
//        }

      //透传数据
      uint8_t c = client.read();
      Serial.write(c);

    }
 if (Serial.available())//串口读取到的转发到wifi,因为串口是一位一位的发送所以在这里缓存完再发送
  {
      delay(50);//加50ms延迟 保证串口字符接收完毕
      size_t counti = Serial.available();//串口缓冲器 返回的是缓冲区准确的可读字节数
      uint8_t sbuf[counti];
      Serial.readBytes(sbuf, counti);//从串口读取指定长度counti的字符到缓存数组sbuf。
      delay(50);//加50ms延迟 保证缓存完毕
      client.write(sbuf, counti);

  }



}


最后客户端视频:https://v.youku.com/v_show/id_XMzk2NTE5MTk5Mg==.html?spm=a2h3j.8428770.3416059.1

本人对创客文化非常喜爱,利用Arduino业余时间制作了一个基于Arduino和OneNet的环境监测小作品,希望能够对有相似想法的朋友有所帮助,本人QQ:690333105 验证信息:Arduino 欢迎跟大家一起交流学习

猜你喜欢

转载自blog.csdn.net/m0_37738838/article/details/83999561