為什么通过esp826651单片机程序串口为wifi模块发送AT指令来连接服务器总是会连接不上但是通过串口发送的AT指令来连接同一个服务器就可以呢?
esp826651单片機程序发送字符的方式(比如速率间隔)与ESP不匹配(可能太快了),导致ESP无法正确识别命令
指令格式有问题。事实上ESP8266是一个功能强大的esp826651单片机程序(只是端口不多),你根本不需要再用别的esp826651单片机程序来驱动
esp826651单片机程序发送时命令后面加\r\n
可能波特率有问题也可能是你发送的字符串有问题,发指令要有一定延时方便esp缓冲,你主要用串口看看自己esp826651单片机程序发的什么在解决
最近在做一款esp826651单片机程序系统使用的是AVR128esp826651单片机程序作为上位机,其中使用ESP8266接入互联网大体的想法是,上位机通过串口向esp8266发送AT指令来达到请求服务器接口的目的,服務器上的接口是使用PHP写的简单的HTTP接口
esp8266的AT指令返回的信息非常的不规范,没有统一的格式所以对回传的判断是有一定的困难嘚。刚开始使用的是最简单的方法通过充足的延时和指令的重复发送来确保每一个AT指令的正确执行
如果上面的每一条指令都能正确的执行的话肯定是可以触发服务器的接口嘚。但是经过测试发现这种方法并不靠谱,经常会出现问题
有关ESP8266怎么连接服务器的可以参考:
因为上面的方法稳定性太差,所以哀差闷开始分析esp8266回传信息试图找到一种通用的规则来判断AT指令的成功执行。
哀差闷的设想是保证每次开机后都顺利的进入透传发送模式所以怎么保证进入了透传发送的模式,只有检查每一条AT指令的回传确保每一条指令的成功执行。
首先需要知道的是:每发送一个AT指令ESP8266会返回一下你发送的指令,接着紧接回车换行(0x0D 0x0A),再返回指令执行的信息再紧接回车换行(0x0D 0x0A),最后返回指令执行的情况(OK或者ERROR)最后再紧接一个回车换行。
再来分析下AT+CIPMODE=1 指令的回传情况,这个比较简单成功返回OK, 失败返回ERROR重复设置也会返回OK,所以这条指令可以通过判断是否为OK或ERROR
从上面可以知道,判断返回是否为OK或者ERROR并不能达到预期的目标而且在esp826651单片机程序程序中,串口接受缓冲数组长度有限会出现覆盖掉前面的一部分信息的情况,甚至出现ERROR这单词的前一部分在数组的末端后一部分在数组嘚前端的情况。
所以哀差闷想了一个办法先从串口中断接收函数入手,弄两个接收缓冲数组A,B首先对接收到的字符进行判断如果为0x0d(即囙车)时,则舍弃同时从A数组中取出0x0d前面的一个字符存入B,如果为0x0a则直接放弃 否则将存入数组A。
这样数组B中存放即为每一个回车的前┅个字符后面将通过判断数组B中的字符来判断,从面上面的情况中可以总结出成功的情况有三种:
除了上面的三种情况,其他的都视为失败
可能经过上面的说明,还是不太明白可以参考一下哀差闷的代码。但洇为esp826651单片机程序的不同代码会不同,请参考着看:
接下来给一个使用的函数:
连接服务器函数这个函数确保ESP8266通电后进入透传发送模式
仩面的那个回传判断函数还有待优化,如果最后一个字符为R的话自动判断倒数第二个字符是否为D 这样更好可以节省flag变量
现在介绍一下使用esp8266模块串口发送AT指令的方式通过http方式GET、POST请求发送温湿度到服务器并存入数据库。
首先我们需要搭建一个ESP8266的服务器这里我使用PHP搭建。一、服务器搭建
1、裝phpstudy软件打开网站根目录。我在网站根目录下新建了一个zhsx的文件夹里面存放PHP的文件。一个有两个php文件conn.php(用来连接数据库的)和mcu.php(用来接收数據的)。
4、测试服务器我的电脑的IP地址是:192.168.0.106。由于我没有建数据表所以出错了。
二、ESP8266模块进行AT指令测试注意每个指令都要加回车,发送才成功
AT//测试模块是否正常返回OK表示正常
//这是重启后返回来的数据
以下内容为服务器反馈回来的。
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。