esp8266烧录模式客户端代码,可作为客户端连接javaweb,app,qt或者你自己 写的socket
本人经过毕设的洗礼,总结半年来学习使用esp8266的方法。在这里需要给各位理清一下esp8266的思路(极度适合小白阅读的文章,捷径在此)。本人经过挣扎后总结到esp8266有三种使用方式,AT指令,lua和烧录模式。本文为小白提供快速掌握使用esp8266的捷径,因此主要说一下第三种方法。
先上一张图,理清每个方法需要学什么,怎么用。
AT指令,lua
at指令被认为是初学者应该学的最简单的方式,本人在此方法中挣扎过一个星期,最后得出的结论时:虽然简单,但是太死板,太不稳定,太玄学。举个例子,你用arduino来玩esp8266,写好了at指令,假如此时换成stm32来玩esp8266,那你还得改at指令。而且at指令,你能记住几个,于其记at指令,不如直接写c代码,然后烧进esp8266,这样还能一劳永逸。
烧录模式是什么
刚开始学,你可能听到过透传啊、钓鱼固件啊什么的,其实本人在学烧录模式这个方法时候,没有去接触钓鱼什么的。此外可能有的人迷透传,但是小编告诉你,请你不要觉得透传是什么高大上的东西,其实就是一个普普通通的概念,听起来很牛逼而已。
透传举个例子就明白:esp8266连接在A板子上,A板子通过esp8266给手机发数据,A板子发啥,手机就接收到啥,这就是透传。说白了就是esp8266把数据原封不动的收发的过程就是透传了。(其实这个概念对于你用esp8266并没有太大用)
烧录固件:什么叫给esp8266烧录固件,就是你把代码烧进esp8266,这个代码就是esp8266的固件了。厂家生产的esp8266自带at指令库,因此可以直接用at指令操作esp8266,而不用给esp8266烧录固件。
烧录模式是什么呢,就是自己写代码(不用担心这个代码你不会写,小编已经为你写好了,而且正如题目所写,代码适用范围还是比较广的,而且代码很简单,只有30行,纯c代码,您看的懂得,不要担心啦),然后烧录进esp8266,那么你自己写的代码就把at指令库覆盖了,你的代码就成了esp8266的固件了,当然此时你想用at指令操作esp8266,那就不可能了,因为被你自己的代码覆盖掉了呀。
烧录模式怎么用
了解了烧录模式是什么,咱们继续说怎么用。正如上面所说,你把你自己的代码烧录进esp8266,那么这个代码有什么用,能完成什么功能呢:
最最最牛逼的是,这个代码可以把esp2866作为一个串口来用,是的,你没听错,有了这个代码,esp8266就变成了一个串口通信工具,那这不就很简单了,串口收发数据你总会吧,就是这么简单。咱们用arduino举例子。arduino定义软串口,然后esep8266的rx,tx引脚与软串口连接(串口怎么定义我就不多说了吧),传感器检测到A数据交给ardunio,arduino通过串口交给esp8266,esp8266里边的代码会读取软串口数据(这个代码,小编帮你写好了),这样esp8266拿到了数据,然后通过写好的代码(小编帮你写好了)发给目标软件。
因此的因此,从上面的例子来看,你需要做的只不过是把代码烧录进去esp8266,然后定义好开发板的串口,只需要这两步就好了。即便中途换板子,你也不用再动esp8266,你只需要在新板子上定义一下串口就ok啦。(为了让小白快速完成esp8266数据的收发,小编真的是帮你们写好了很多东西,贴心吧)
看到这里,你已经从宏观上明白了怎么用烧录模式,下边开始操作
1.烧录的代码是什么(全是干货!!!!!)
代码的注释一定要好好看,它会让你理解更透彻,犯的错误更少。重要的话说三遍:一定要看,仔细看注释!!!
有的注释真的很长,小编为了大家看的方便,也想断行写,但是csdn的markdown貌似不允许断行。但不管看起来多么长的注释,也请你好好看完。
#include <ESP8266WiFi.h>
//wifi密码及WiFi名字
const char *ssid = "***";
const char *password = "****";
//目标服务器ip和端口号
const char *host = ****";//目标IP地址。esp8266与要连接的目标在同一局域网内,这个ip是目标ip,不是网关ip。什么意思呢,举个例子,手机开热点,esp8266和电脑都连接手机热点,esp8266要和电脑的socket通信,那么这里的host就是手机给电脑分配ip地址,而不是手机自己的ip地址(小编第一次入坑很深,爬了好久才出来),下边的端口号也是目标的端口号。
const int tcpPort = *****;//目标端口号
WiFiClient client;//设置esp8266为客户端。因为esp8266是客户端,所以esp8266需要连接其他设备的WiFi,而不是其他设备连接esp8266的WiFi。比如手机开热点,esp8266就把手机当成WiFi,然后连接手机的热点。
void setup() {
//启动串口通信
Serial.begin(9600);//这个代码让你完成与开发板定义的串口的通信,就这么简单
delay(10);
//连接到WiFi
WiFi.begin(ssid, password);
//处理未连接异常
while(WiFi.status() != WL_CONNECTED)
{
delay(100);
}
}
void loop() {
//处理未连接到服务器异常,如果没连接上目标设备WiFi,那就一直尝试连接
while(!client.connected())
{
if(!client.connect(host, tcpPort))
{
delay(500);
}
}
//透传数据,这几行代码很简单,但作用很大,比如你的电脑通过网络发数据给你esp8266,那么你的esp8266拿到数据就会通过串口传输给你的开发板。
while (client.available())//读取到的数据转发到到串口
{
uint8_t c = client.read();
Serial.write(c);
}
//这几行代码作用也很大,开发板的数据通过串口给了esp8266,esp8266把他发送给电脑,就是这几行代码完成的
if (Serial.available())//串口读取到的转发到wifi,因为串口是一位一位的发送所以在这里缓存完再发送
{
delay(1000);//一定要注意这个1秒的延迟,这个延迟拯救了小编的整个毕设。小编刚开始用esp8266给javaweb发数据,结果数据会随机断行,后来小编详细了解了底层架构和http请求,发现虽然官方说的是串口是一位一位接受发送数据,但是实际上由于你的电压等等各种情况,开发板通过串口发给esp8266的数据是随机发送几位,可能有时候是一位,也可能有时候是好几位,最后小编经过多天的分析,发现这里一定要有一个延迟函数,哪怕延迟0.5秒也行,不过小编试了试0.2秒,貌似就不行了。有了这个延迟发送的数据就不会自动断行
size_t counti = Serial.available();
uint8_t sbuf[counti];
Serial.readBytes(sbuf, counti);
client.write(sbuf, counti);
}
}
如果你不想用这个代码,小编还帮你准备了一份esp8266的代码,供你下载,话不多说,配上链接
点击此处下载另一份代码
2.怎么把上述代码烧录进入esp8266中,作为你的固件:
硬件连接部分呢,只需要一个usb转ttl(某宝上很多,也很便宜),下边配上usb-ttl与esp8266连接图,两者连接之后,直接把usb-ttl插入电脑即可。
软件部分,嗯~~用什么软件呢,就用arduinoIDE了,具体的,小编要偷个懒,借用一下其他小编的操作吧。操作连接如下(注意注意,你要首先有个翻墙软件,否则接下来下载开发板信息的时候,你可能会不成功):
点击此处:环境配置链接
点击此处:下载操作链接
烧录进去小编的代码之后,那么你就大功告成百分之99了。接下来就是怎么使用烧录好的esp8266了。
3.烧录好之后怎么用esp8266
刚刚讲了usb-ttl怎么与esp8266连接,现在既然已经烧录好了代码,那么你就不用再用usb-ttl了,现在我们的esp8266就可以插到各种开发板上了,小编这里用arduino举例子:
小编使用arduino里边的12,13作为软串口,你们自己也可以自己定义哈。
注意注意注意,这里连线的时候还有一个坑,前边esp8266与usb-ttl连接时候,用到了gpio0,但是这里esp8266连接uno时候是没有用到gpio0的。小编当时因为这个疏忽,花了三天时间才解决,真是心疼我的三天,一根线,阻碍了我的毕设整整三天。
连接好之后,你操作arduinno通过软串口与esp8266收发数据,esp8266就进而把数据收发给服务器端了。
4.用网络调试助手试一试吧
到这里,你的esp8266就具备了以客户端的身份连接wifi,以及收发数据的能力了。如果你自己写了socket,那么你就可以用esp8266与你的socket通信了。如果你把socket放到你的javaweb里边或者app里边,那么你就可以通过esp8266与javaweb或者app通信了。
如果你不会自己写socket,那真的没事,小编还可以帮你。用手机下载一个网络调试助手软件,然后esp8266连接你的手机的热点,然后在网络调试助手里边设置一个端口号(要与烧录进去esp8266的代码里边的端口号相同),这样你的esp8266就可以与网络调试助手通信了(说白了,网络调试助手这种软件就是socket,只不过是别人写好了,你直接用就好了)。
小编为了让你们省心,给你们提供了一款网络调试助手,小编亲测,目前最好用的网络调试助手。链接如下:
点击此处下载网络调试助手
结语
小编不是大神,或许有什么地方表述不当或者理解有误,再或者有些地方没有讲清楚,小编接下来会进行不断改进。有机会的话,小编会继续发表文章讲解esp8266以及其他硬件的使用捷径。小编希望自己的文章能够帮助大家,希望大家在学习知识技术的过程中走,少走一些弯路。
如果觉得文章对你有帮助,那就请点个赞吧!!!(重要的事说三遍)