文章目录
前言
本次实验使用的例程来自github,仅做了少量改动
附上github源码
点这里
一、所用器件
(1)STM32F103C8T6
(2)转串口模块(CH340)
(3)esp8266-01s
(4)气体检测模块_MQ
二、代码分析
(1)接线
STM32 | ESP8266 |
---|---|
PA2 | RX |
PA3 | TX |
PA4 | 复位 |
3V3 | VCC |
GND | GND |
STM32 | DHT11 |
---|---|
PA6 | DATA |
STM32 | MQ气体传感器 |
---|---|
PA7 | AO |
STM32 | 转串口模块 |
---|---|
PA9 | RX |
PA10 | TX |
(2)代码
<stm32f10x_it.c>:中断处理函数
<usart1.c>:与上位机通信
<usart2.c>:与ESP8266通信,串口2接收中断处理上位机发送来的数据
<timer2.c>:定时器2中断用来发送温湿度数据,10S
<timer3.c>:定时器3中断用来发送心跳包(ping,用于保持和服务器连接,长时间没给服务器发送数据会被踢下线),2s和30s两种模式
<timer4.c>:将串口2接收到的服务器数据依次存放在MQTT接收缓存数组中,50m
(这里仅写出重要的或换一台设备连接时需要改动的地方)
<mqtt.h>
(产品ID、设备ID、鉴权信息)这三个信息需要改动。后面会讲从哪里看这些信息
在创建onenet步骤中的第(6)步、第(10)步。
#define PRODUCTID "461722" //产品ID
#define PRODUCTID_LEN strlen(PRODUCTID) //产品ID长度
#define DEVICEID "795884401" //设备ID
#define DEVICEID_LEN strlen(DEVICEID) //设备ID长度
#define AUTHENTICATION "1234" //鉴权信息
#define AUTHENTICATION_LEN strlen(AUTHENTICATION) //鉴权信息长度
#define S_TOPIC_NAME "topic_one" //需要订阅的主题
#define P_TOPIC_NAME "topic_two"
#define Data_TOPIC_NAME "$dp"
<wifi.h>
(路由器SSID :你的电脑当前连接的wifi ID名 )
(路由密码:你的电脑当前连接的wifi 密码)
#define SSID "xxxx" //路由器SSID名称
#define PASS "xxxxx" //路由器密码
<main.h>
char *cmdLED_On = "LEDON"; //LED打开
char *cmdLED_Off = "LEDOFF"; //LED关闭
char *cmdDHT11_On = "DHTON"; //温湿度数据传输打开
char *cmdDHT11_Off = "DHTOFF"; //温湿度数据传输关闭
char *ledFlag = "LEDOFF"; //LED状态
int dhtFlag = 0; //温湿度数据传输状态
int main(void)
{
Delay_Init(); //延时功能初始化
Usart1_Init(9600); //串口1功能初始化,波特率9600
Usart2_Init(115200); //串口2功能初始化,波特率115200
TIM4_Init(500,7200); //TIM4初始化,定时时间 500*7200*1000/72000000 = 50ms
LED_Init(); //LED初始化
DHT11_Init(); //初始化DHT11
Adc_Init();
WiFi_ResetIO_Init(); //初始化WiFi的复位IO
IoT_Parameter_Init