1. MQTT协议
该协议为应用层协议,传输层使用的是tcp,MQTT的订阅和发布,就相当于在抖音中你关注了某个领域的博主(订阅),如果有其他人发了作品就会推给你(发布),默认已经安装好了
简单演示
订阅
mosquitto_sub -h "47.121.24.16" -p 1883 -t "A"
mosquitto_sub 订阅指令
-h 主机ip
-p 端口号1883
-t 主题
发布
mosquitto_pub -h "47.121.24.16" -p 1883 -t "A" -m "nihaoma"
mosquitto_pub 发布指令
-h 主机ip
-p 端口号1883
-t 主题
-m 内容
订阅主题“A”的就可以收到
2.esp8266通过MQTT连接服务器
1.需要在单片机里面建立配置用户信息
void esp8266_connect_MQTT(const char*ip,int port,const char* user,const char* password)
//需要云服务器ip地址和端口号,以及MQTT服务器的用户名以及密码,如果是匿名用户的话,用户名和密码随便给
根据手册构建指令配置信息保存在单片机rom
2.eps8266连接MQTT
连接成功在服务器这边验证
isof -i |grep mosquitto //查看链接情况
3.发布
单片机发布,MQTT服务器这边订阅就可以收到
void esp8266_Publish(const char* topic,const char*content);//发布的主题以及内容
4.订阅
在MQTT服务器这边发布,esp8266这边订阅,然后通过串口2返回给单片机,单片机将其给串口1,然后在串口助手上显示出来
void esp8266_subscribe(const char* topic)//订阅主题
发现发送的helloworld收到成了helloword了,所以我们需要
uint8_t data,flag=0;uint32_t old_tick=0;while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */if(HAL_GetTick()-old_tick>50&&flag) //假如说收到最后一个字符后等50ms后,说明接收完了{clearbuffer(); //打印到串口1,清除缓冲区flag=0; //防止频繁冲刷缓冲区}if(HAL_UART_Receive(&huart2,(uint8_t*)&data,1,10)==HAL_TIMEOUT) //一个字符和另一个字符很快就能接收,如果超过10ms,就直接continue{continue;}else{ buffer[num++]=data; //放到缓冲区里面old_tick=HAL_GetTick();//获取当前字符时间,用于和下一个字符作对比flag=1;}}