调试开始
- 串口测试
- 部分错误原因
- WiFi功能调试
串口测试
先连接USB线,插上电脑,当然用USB转ttl模块也行(某宝上5块钱买来的)
下载一个程序试试看
下面是简单的串口调试程序,即是将串口助手中输入的字符打印在页面上,效果如下图所示,说明上传成功
部分错误原因
曾经出现的报错原因:
1.没编译就上传
2.开发板型号写错(下面是正确选型)
因为我用的是nodemcu,所以这里选择ESP-12E,如果是esp8266则选择 esp8266即可
3.波特率设置不同,这样串口显示可能出现一堆乱码,但是不影响编译上传成功(应该是115200)
4.顺便注意一下,就是arduino里面单引号和双引号是有区别的,字符要用双引号,否则会出来一串数字
WiFi功能调试
然后我们就可以开始进行WiFi功能的调试了,这里的教程主要用到了UDP通信原理,
因为不会写Android,所以用的APP。用到的APP是“有人串口助手”,网上应该有的下载,Android商店反正是没见。。。
下面先来看程序(这是经过部分修改的,为了调试方便)
程序部分讲解
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信号出现:我们连上他就可以进行串口调试了
下面是部分的测试数据
12300000789就是发送为‘1’的返回数据
10111111789就是发送不是‘1’的返回数据
电脑arduino串口助手的接收数据的分析类似
实现和51的通信的话想到两种方法,一种,直接通过esp8266传过来的消息进行判断,但是会有部分字符需要删掉。第二种,esp8266先进行判断。然后串口打印消息给51,然后51再进行判断