调试开始

  • 串口测试
  • 部分错误原因
  • WiFi功能调试


串口测试

先连接USB线,插上电脑,当然用USB转ttl模块也行(某宝上5块钱买来的)

ESP8266的串行通信 esp8266串口设置_android


下载一个程序试试看

下面是简单的串口调试程序,即是将串口助手中输入的字符打印在页面上,效果如下图所示,说明上传成功

ESP8266的串行通信 esp8266串口设置_ESP8266的串行通信_02

部分错误原因

曾经出现的报错原因:
1.没编译就上传

2.开发板型号写错(下面是正确选型)

因为我用的是nodemcu,所以这里选择ESP-12E,如果是esp8266则选择 esp8266即可

ESP8266的串行通信 esp8266串口设置_ESP8266的串行通信_03


3.波特率设置不同,这样串口显示可能出现一堆乱码,但是不影响编译上传成功(应该是115200)

4.顺便注意一下,就是arduino里面单引号和双引号是有区别的,字符要用双引号,否则会出来一串数字

WiFi功能调试

然后我们就可以开始进行WiFi功能的调试了,这里的教程主要用到了UDP通信原理,

因为不会写Android,所以用的APP。用到的APP是“有人串口助手”,网上应该有的下载,Android商店反正是没见。。。

ESP8266的串行通信 esp8266串口设置_android_04


下面先来看程序(这是经过部分修改的,为了调试方便)

程序部分讲解
WiFi初始化,设置端口,在串口助手中设置的应该是监听端口10000

#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
/*****************AP设置项 *****************/
const char *APssid="UDP" ;          //AP名字
const char *APpassword="12345678";  //AP密码
/****************UDP设置项 *****************/
unsigned int read_Port = 10000;     //监听端口
unsigned int send_Port = 20000;     //发送端口
char readdata[512];                 //数据缓存
WiFiUDP Udp;                        //定义udp

设置为AP模式

void setup() {
  Serial.begin(115200);
  Serial.println("");
  WiFi.mode(WIFI_AP);               //设置为AP模式
  WiFi.softAP(APssid, APpassword);  //配置AP参数,启动AP
  Udp.begin(read_Port);             //UDP设置监听指定端口
}
void loop() {
  /*********AP如果有设备连接,开启接收处理数据机制 **********/  
  if(WiFi.softAPgetStationNum()){
      Udp_Handler(Read_Udp());
      //Serial.println("收到了哦");
  }
}

接收从手机的串口助手发送过来的数据并返回给nodemcu判断

/*自定义函数
*将接收的数据,以String类型返回,方便分析处理
*/
String Read_Udp(){
  String data="";
  int packetSize = Udp.parsePacket();
  if (packetSize) {
    memset(readdata,0x00,sizeof(readdata));
    Udp.read(readdata, 511);
    Udp.flush();
    for(int i=0;i<packetSize;i++){
      data +=readdata[i];
    }
    Serial.println(data);    
  }
  return data;
}

看返回的是不是字符串1

/************自定义函数,对接收数据分析处理************/
void Udp_Handler(String data){
  if(data!=""){
    if(data=="1"){
      myPrint("00000",1); 
      Serial.println("收到了哦");   
    }  
    else
    {
      myPrint("11111",0);
      Serial.println("收到的数据好像不对哦");
    }
          
  }  
}

Udp.beginPacket(“udp还没有收到101”, send_Port);这一句有点点迷糊,因为手机助手不管是在20000还是10000端口还是电脑的串口监视器都没有收到它的返回消息

/*自定义函数
*封装数据发送功能,方便调用
*第一个参数,使用String类型作为发送内容
*第二个参数,a为真,指定发送,对发送方返回数据,a为假,广播发送,群发信息
*/
void myPrint(String data,bool a){
  if(a){
    Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
    Udp.print("123");
    Serial.println("udp已经收到");
  }
  else{
    Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
    //Udp.beginPacket("", send_Port);
    Udp.print("101");
    Serial.println("udp还没有收到101");
  }  
  Udp.print(data);
  Udp.print("789");
  Serial.println("你好呀");
  Udp.endPacket();
}

运行程序后可以看到已经有WiFi信号出现:我们连上他就可以进行串口调试了

ESP8266的串行通信 esp8266串口设置_小程序_05

下面是部分的测试数据
12300000789就是发送为‘1’的返回数据
10111111789就是发送不是‘1’的返回数据

ESP8266的串行通信 esp8266串口设置_串口_06


电脑arduino串口助手的接收数据的分析类似

ESP8266的串行通信 esp8266串口设置_物联网_07


实现和51的通信的话想到两种方法,一种,直接通过esp8266传过来的消息进行判断,但是会有部分字符需要删掉。第二种,esp8266先进行判断。然后串口打印消息给51,然后51再进行判断