主要功能
- STM32采集温湿度信息.
- 人体红外感应模块, 检测到有人活动, LED3亮.
- 手机APP通过WIFI连接, 可查看温湿度信息, 可控制LED1, LED2, 蜂鸣器.
- STM32与电脑上位机串口连接, 可查看调试信息.
- 手机APP可发送信息给电脑上位机.
物料清单
- 野火STM32F103指南者开发板(自带ESP8266的WIFI模块)
- DHT11温湿度传感器
- HC-SR501人体红外感应传感器
- 网络调试助手(秉火物联)
功能框图
代码分析
(源码及相关文件随后放在文末, 可根据源码结合过程解读理解)
基本上是以野火的ESP8266模块的源码为基础, 在其上添加了串口调试信息显示, 去掉了手机APP控制LED3的功能, 改为人体红外感应模块检测控制LED3.
ESP8266与STM32通信过程解读:
就是手机APP发送"一些命令"给ESP8266
ESP8266就发给STM32
sSTM32中断接收"这些命令"放到strEsp8266_Fram_Record结构体里
接收完毕进入程序 失能中断 看"这些命令"包含了什么
如果有开灯, 则开灯, 然后把结果放到cStr中
如果有开蜂鸣器, 则开蜂鸣器, 然后把结果放到cStr中
如果有接收数据, 则接收数据, 然后把结果放到cStr中
如果要发回APP, 则把cStr发回给APP
APP根据结果, 更改(温湿度)信息
使用手机APP后总结:
所以可以自定义APP发送数据通过ESP8266到stm32上
但是不能显示stm32通过ESP8266发回给APP的数据
因为这涉及到APP的源码
过程中所遇到的问题
-
在用野火的AT指令测试调试的代码时, ESP8266上电串口调试助手出现乱码
乱码的部分是ESP8266发送给STM32的部分显示乱码, STM32发送给串口调试助手的部分显示正常, 个人认为应该是波特率的问题, 随后将STM32与ESP8266通信的波特率从115200改为74880, 显示正常了. -
上电后显示正常, 但是发送AT指令后, ESP8266回复信息显示乱码
个人认为还是波特率的问题, 又将波特率从74880改回115200, 虽然上电后显示乱码, 但是AT指令回复显示正常了. -
部分指令回复ERROR
这个问题可能有2种情况, 第一种情况是可能指令格式不对, 不符合当前的模式. 比如如果你之前设置了多连接模式(CIPMUX=1), 接着发送数据没有带网络连接ID号(AT+CIPSEND=<length>), 这时会返回ERROR; 第二种情况是查询波特率(AT+UART_CUR?)之类的命令返回ERROR, 对于这种情况我暂时没找到原因, 在此先挖一个坑, 有机会以后回来填一下, 当然如果有知道原因的朋友们可以说一下, 万分感谢! -
ESP8266成功连上手机热点, 但是不能识别到指定IP地址通信
这种情况下, 我更改了网络调试助手的IP地址, 改成了和ESP8266相同的网关, 这样应该在同一局域网中, 结果成功了.
SHOUT OUT TO
ESP2866常见问题,问题集锦,总有您想要的!
ESP8266作为客户端通过路由器连接服务器的简单实现
WiFi模块调试问题:AT+CIPSTART=“TCP”,“192.168.43.212”,8080 ERROR CLOSED