一.通过AT指令设置esp01s(记得发送新行)

将esp01s与ch340(usb转ttl相连)

1.esp01s默认的波特率为115200,而51的波特率无法达到如此高度,发送AT+CIOBAUD=9600 将esp01s设置成9600的波特率,发送AT+RST重启esp,之后串口助手波特率记得改回9600

2.发送AT+CWMODE_DEF=3设置esp为热点客户端并存模式

3.发送AT+CWJAP_DEF="tuan","12345678"连接热点,前一个字符串为热点名称,后一个为密码

4.发送AT+SAVETRANSLINK=1,"test.mosquitto.org",1883,"TCP"连接公共的mqtt服务器,即mosquitto服务器

5.重启esp01s

二.发送mqtt报文

1.发送mqtt的连接报文(具体报文格式请参考其他大佬写的博客)

记得以hex模式发送,同时取消发送新行

10 13 00 04 4D 51 54 54 04 C2 00 78 00 03 68 6A 74 00 00 00 00

如果返回的是20 02 00 00则代表连接成功

2.发送订阅的报文

82 08 00 02 00 03 68 6A 74 00

返回 00 结尾表示成功

三.将51单片机与esp01s相连

将以下代码写进51单片机(注意51的晶振一定是要11.05926的)

#include "reg52.h"sbit led=P2^4;   //led灯io口位定义char connect[]={
0x10,0x13,0x00,0x04,0x4D,0x51,0x54,0x54,0x04,0xC2,
0x00,0x78,0x00,0x03,0x68,0x6A,0x74,0x00,0x00,0x00,0x00
};    //mqtt连接报文   21个char dingyue[]={0x82,0x08,0x00,0x02,0x00,0x03,0x68,0x6A,0x74,0x00};//mqtt订阅报文,10个      int i; //用来循环串口输出数据
char receiveData=0x37;  //用来保存mqtt服务器发来的信息void delay(int j)  //随便写的延迟函数
{while(j--);
}void UsartInit()   //串口配置函数
{TMOD=0x20;      //设置定时器1工作方式TH1=0xfd;        //波特率9600TL1=0xfd;TR1=1;SM0=0;SM1=1;REN=1;EA=1;ES=1;
}void connect_mqtt()   //连接mqtt函数
{for(i=0;i<21;i++){SBUF=connect[i];//将接收到的数据放入到发送寄存器while(!TI);           //等待发送数据完成TI=0;                        //清除发送完成标志位}}void dingyue_mqtt()    //mqtt订阅函数
{for(i=0;i<10;i++){SBUF=dingyue[i];//将接收到的数据放入到发送寄存器while(!TI);           //等待发送数据完成TI=0;                        //清除发送完成标志位}}void alive_mqtt()    //mqtt保活函数
{SBUF=0xc0;//将接收到的数据放入到发送寄存器while(!TI);             //等待发送数据完成TI=0;                        //清除发送完成标志位SBUF=0x00;//将接收到的数据放入到发送寄存器while(!TI);          //等待发送数据完成TI=0;                        //清除发送完成标志位}void main()
{   UsartInit();  //    串口初始化connect_mqtt();   // 连接mqtt服务器delay(10000);dingyue_mqtt();   // 订阅名为 hjt 的主题delay(10000);led=0;while(1){delay(500000);delay(500000);delay(500000);delay(500000);alive_mqtt();}
}void Usart() interrupt 4     //串口中断函数
{receiveData=SBUF;//将接收到的数据存到变量内RI = 0;//清除接收中断标志位if(receiveData == 0x31)   //如果接收到的信息为‘1’,则打开led灯{led=1;}if(receiveData == 0x32)   //如果接收到的信息为 ‘2’,则关闭led灯{led=0;}}

烧进去后将51单片机进行复位,打开mqtt.fx向服务器hjt主题发送数据测试一下

四.测试视频

https://www.bilibili.com/video/BV1Bm4y1U7L7?share_source=copy_web

看最后二分钟就行

五.资源下载

代码和资源已经托管到giteee

找到其中的mqtt51文件夹即可下载

https://gitee.com/hong-jiatuan/hjt.git

单片机通过mqtt联网(51单片机和esp01s)相关推荐

  1. 51单片机五层电梯控制器 基于51单片机的五层电梯控制系统

    51单片机五层电梯控制器 基于51单片机的五层电梯控制系统 包括源代码和proteus仿真 系统硬件由51单片机最小系统.蜂鸣器电路.指示灯电路.内部按键电路.外部按键电路.直流电机.内部显示电路.外 ...

  2. 51单片机开发系列一-51单片机开发环境搭建以及入门汇编代码

    51单片机开发系列一 51单片机开发环境搭建以及入门汇编代码 象棋小子    1048272975 1. 51单片机概述 51单片机是对所有兼容Intel 8031指令系统的单片机的统称.目前教科书基 ...

  3. 51单片机自动浇水系统/51单片机自动浇花系统/智能浇水系统

    51单片机自动浇水系统/51单片机自动浇花系统 整个设计由51单片机模块.湿度传感器模块(土壤湿度传感器或者温度传感器或者温湿度传感器,都可以).lcd1602液晶显示模块等组成,实现智能浇花和智能浇 ...

  4. ​stm32单片机真的可以取代51单片机吗?​

    stm32单片机真的可以取代51单片机吗? 计算机类的小伙伴们应该都学过单片机,那么单片机在我们日常生活里其实非常常见,只是普通人并不是特别懂得什么叫做单片机. 我们先来解释一下单片机的含义.单片机, ...

  5. 想学单片机怎么入手?51单片机入门自学最佳指南

    曾经我是自学单片机然后跨行成功,今天来分享下自己的经验. 在网上看了很多文章,很多人说现在51单片机已经过时了,建议从STM32开始学习. 或者单片机没有钱途,直接搞ARM+Linux. 我的建议是从 ...

  6. 单片机如何使用?51单片机C语言编程实例有哪些?

    大家好,我是无际单片机编程的徐明,今天和大家一起探讨一下"单片机如何使用?" 单片机如何使用,我们要知道单片机在哪里使用? 单片机是很多电子产品的核心器件,它具有一定的逻辑判断和事 ...

  7. 51单片机c语言运算符,51单片机表达式语句的用法解析

    描述 表达式语句是最基本的一种语句.不同的程序设计语言都会有不一样的表达式语句,如VB就是在表达式后面加入回车就构成了VB的表达式语句,而在51单片机的C语言中则是加入分号";"构 ...

  8. 51单片机计算器_基于51单片机的倒计时温度检测报警器

    基于51单片机的倒计时温度检测报警器 学习单片机断断续续半年了,在学长学姐的教学帮助下,完成了51单片机的入门学习,开始实践做项目,在一周时间内设计和制作出个人项目.起初,我设计和选择的是12864显 ...

  9. 51单片机c语言程序控制,51单片机C语言编程基础及实例.pdf

    基础知识: 51 单片机编程基础 第一节:单数码管按键显示 第二节:双数码管可调秒表 第三节:十字路口交通灯 第四节:数码管驱动 第五节:键盘驱动 第六节:低频频率计 第七节:电子表 第八节:串行口应 ...

最新文章

  1. “移花接木”偷换广告:HTTPS劫匪木马每天打劫200万次网络访问
  2. 纯CSS实现多级菜单,兼容IE6
  3. python中abc属于字符串吗_Python基础学习:字符串
  4. Redis系列(四)-低成本高可用方案设计
  5. Linux基础(使用ssh服务管理远程主机1)
  6. Android安装两次才成功,Android应用从市场安装完成打开与桌面打开,被启动两次的问题...
  7. Gerchberg–Saxton算法
  8. ES11新特性_可选链操作符---JavaScript_ECMAScript_ES6-ES11新特性工作笔记064
  9. android 加载系统私有库,Android 搭建私有maven仓库及上传项目
  10. 常用linux命令分组记录V1
  11. pytorch——nn.BatchNorm2d()函数
  12. BackTrack3(BT3破解wifi密码)
  13. Unity3D 游戏贴图(法线贴图,漫反射贴图,高光贴图)
  14. PyTorch实战使用Resnet迁移学习
  15. 智力题--CSDN论坛收集
  16. DRAM BRANK
  17. php中尊敬的某某某先生代码,auth.class.php
  18. 决策树【机器学习笔记简摘】
  19. 月薪25K-35K|格灵研究院招聘算法工程师、Java架构师
  20. 【Vue系列】vuex详解,一篇彻底搞懂vuex

热门文章

  1. wdk与DDK有什么区别
  2. 吊打面试官,笑对 2022 金三银四,2022年最全面试真题大汇总
  3. 安装tensorflow报错
  4. 【AI理论学习】对Transformer中Positional Encoding的理解
  5. Oracle如何实现列转行
  6. 检测到有潜在危险的 Request.Form 值
  7. 解决优学院2.0禁止复制粘贴答案
  8. Fiddler简介与Web抓包,远程抓包——小白入门
  9. Python queue
  10. PTA 天梯赛的善良(20分)[C语言]