智能车与机器人技术交流平台
概述
可能已经有人很熟练的编写ESP8266程序,但是因为我学习运用的时间也就一周左右,踩了好多坑,所以不喜就不要看勿喷。文章仅此分享交流一些经验,供此参考。
主要做的工作是连接服务器,用app控制灯的亮灭,以此类推也可以控制继电器以及向服务器传输IIC或者其他传感数据。下面是几张做出来的成果照片,只是做了项目的一部分,后续会把完整项目的代码发布出来。
模块用的ESP8266MOD,协议是TCP,APP用的TCP连接(浏览器上下载就可以),由于阿里云,腾讯的服务器是MQTT协议,所以也会发布一版此协议的程序。
TCP直连APP可以直接在聊天窗口发接消息,也可以在12宫格自行设置,我设置的开关灯。
实现方法
1、ESP8266配网
配网用安信可公众号的一键配网功能,wifi名称和密码写入即可。
WiFi.mode(WIFI_STA);//设置工作模式
WiFi.beginSmartConfig();//开始快连开启快连模式,快速连接 ESP8266 Station 到 AP。ESP8266 抓取空中特殊的数据包,包含⽬ 标 AP 的 SSID 和 password 信息,同时,用户需要通过手机或者电脑广播加密的 SSID 和 password 信息。
WiFi.smartConfigDone()//等待配网完成。
WiFi.status()//判断当前是否联网,判断此时wifi状态,做好相应的操作。
WiFi.localIP());ESP8266的ip
WiFi.gatewayIP());//路由的IP,可将其打印在串口或者显示在oled液晶屏,我没显示和本地ip操作一致。
Oled液晶屏不在此讲解,可自行看资料,网上好多,将IP显示在oled显示屏花费了我半天的时间,IP地址属于IP类型,不能直接显示,所以需要将此转换为字符串,再转换为char*格式,具体操作见下。
ip1=WiFi.localIP().toString();
OLED_ShowString(0,6,(char *)(ip1.c_str()),16);
千万不要一蹴而就将整个公式写一行代码,因为Arduino软件自身或者模块的问题(不太清楚),公式最好一步一步写,不然会出错。
2、连接服务器
服务器IP和端口都是固定的,所以你需要查看你要连接的服务器明确他们的信息。
client.connect(serverIP, serverPort)//模块连接WIFI后通过路由连接服务器,serverIP,是IP地址,serverPort是端口,连接成功返回1,反之为0。
client.available()//判断有无数据到达,有返回1,没有返回0。
client.read()//读取服务器发送的数据。
client.write()//给服务器发送数据。
3、接收到数据解析操作IO口
操作IO口开始我用的乐鑫的SDK,软件是ARduino软件,不知道是否是因为没有用乐鑫提供的IDE还是什么导致不能成功操作,所以后来我又用了ARDuino的SDK来操作,Arduino引脚与8266对应不同,关系表如下。
static const uint8_t D0 = 16;
static const uint8_t D1 = 5;
static const uint8_t D2 = 4;
static const uint8_t D3 = 0;
static const uint8_t D4 = 2;
static const uint8_t D5 = 14;
static const uint8_t D6 = 12;
static const uint8_t D7 = 13;
static const uint8_t D8 = 15;
static const uint8_t D9 = 3;
static const uint8_t D10 = 1;
如果要操作IO12,#define LED D6
pinMode(LED,OUTPUT);//配置输入还是输出
digitalWrite(LED, HIGH);//设置高 digitalWrite(LED, LOW);//设置低
其它难点就没有什么了
要源码可以关注公众号,后台私信留邮箱。
调试
调试过程下载的时候有时候会出现错误,COM5或者三口不存在或者找不到,一是重新插拔下载,而是找到Arduino软件的Driver文件重新下载驱动就好了。
二、注意Arduino软件是g++编译器,有的语法不跟C语言 C++一样,比如void*可代替所有类型的指针,但是此软件会报错,只能用同宗同源的类型。
最后,请多多支持,谢谢大家!