主要功能

  1. STM32采集温湿度信息.
  2. 人体红外感应模块, 检测到有人活动, LED3亮.
  3. 手机APP通过WIFI连接, 可查看温湿度信息, 可控制LED1, LED2, 蜂鸣器.
  4. STM32与电脑上位机串口连接, 可查看调试信息.
  5. 手机APP可发送信息给电脑上位机.

物料清单

  1. 野火STM32F103指南者开发板(自带ESP8266的WIFI模块)
  2. DHT11温湿度传感器
  3. HC-SR501人体红外感应传感器
  4. 网络调试助手(秉火物联)

功能框图

android 红外测试 手机红外测量软件_android 红外测试


代码分析

(源码及相关文件随后放在文末, 可根据源码结合过程解读理解)

基本上是以野火的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的源码


过程中所遇到的问题

  1. 在用野火的AT指令测试调试的代码时, ESP8266上电串口调试助手出现乱码
      乱码的部分是ESP8266发送给STM32的部分显示乱码, STM32发送给串口调试助手的部分显示正常, 个人认为应该是波特率的问题, 随后将STM32与ESP8266通信的波特率从115200改为74880, 显示正常了.
  2. 上电后显示正常, 但是发送AT指令后, ESP8266回复信息显示乱码
      个人认为还是波特率的问题, 又将波特率从74880改回115200, 虽然上电后显示乱码, 但是AT指令回复显示正常了.
  3. 部分指令回复ERROR
      这个问题可能有2种情况, 第一种情况是可能指令格式不对, 不符合当前的模式. 比如如果你之前设置了多连接模式(CIPMUX=1), 接着发送数据没有带网络连接ID号(AT+CIPSEND=<length>), 这时会返回ERROR; 第二种情况是查询波特率(AT+UART_CUR?)之类的命令返回ERROR, 对于这种情况我暂时没找到原因, 在此先挖一个坑, 有机会以后回来填一下, 当然如果有知道原因的朋友们可以说一下, 万分感谢!
  4. ESP8266成功连上手机热点, 但是不能识别到指定IP地址通信
      这种情况下, 我更改了网络调试助手的IP地址, 改成了和ESP8266相同的网关, 这样应该在同一局域网中, 结果成功了.