草庐IT

一种STM32F1系列+ESP8266使用MQTT连接阿里云的方法

@于千 2023-04-25 原文

摘要:本文讲述一种使用STM32F103C8T6控制器+ESP8266使用MATT连接阿里云的方法,可以搭配这篇文章中的云Web或移动开发,实现物联网功能并在电脑网页或手机网页让硬件的数据可视化,实验时间2022年5月21日。

【1】MQTT连接指令如下,使用串口助手电脑直接连接ESP8266发送一下代码可以连接到阿里云上面,这次我们要用STM32F103C8T6控制器对ESP8266发出一下指令,这些指令的内容阿里云中已经给出了,具体解释请见下面链接:一种ESP8266使用MQTT连接阿里云和云Web方法_@于千的博客-CSDN博客_esp8266 mqtt连接

AT+RST
AT+CWMODE=1
AT+CIPSNTPCFG=1,8,"ntp1.aliyun.com"
AT+CWJAP="HONOR30Pro","123456789"
AT+MQTTUSERCFG=0,1,"NULL","esp8266A&a12YPHONE7S","642715e19fdbedec9b88dc2d50800a9c10cbd7d7145a54d0755373305d",0,0,""
AT+MQTTCLIENTID=0,"a12YPHONE7S.esp8266A|securemode=2\,signmethod=hmacsha256\,timestamp=1649410494149|"
AT+MQTTCONN=0,"a12YPHONE7S.iot-as-mqtt.cn-shanghai.aliyuncs.com",1883,1
AT+MQTTSUB=0,"/sys/a12YPHONE7S/esp8266A/thing/service/property/set",1
AT+MQTTPUB=0,"/sys/a12YPHONE7S/esp8266A/thing/event/property/post","{\"id\":1649429569996\,\"params\":{\"CurrentTemperature\":41}\,\"version\":\"1.0\"\,\"method\":\"thing.event.property.post\"}",1,0
AT+MQTTPUB=0,"/sys/a12YPHONE7S/esp8266A/thing/event/property/post","{\"id\":1649475904347\,\"params\":{\"AirConPowerConsumption\":50\,\"AirConVolt\":80\,\"RunTimes\":100}\,\"version\":\"1.0\"\,\"method\":\"thing.event.property.post\"}",1,0
 
 
 

但是我们在STM32中放入的串口指令并不能直接COPY上面的代码,因为C语言在字符串中的一些特殊字符需要改变比如"  变为\" ,\变为\\。所以在工程代码中发送的指令已经更改。

【2】下面介绍我的工程代码如何移植其他工程中,首先把esp8266.c、esp8266.h、mqtt.c、mqtt.h添加到你的工程里面,如下图:

 

【3】接下来,连接参数我设置在mqtt.h中,打开如下图。按照按时修改,把WiFi换成你的,把MQTT连接参数换成你的,还有你的MQTT订阅主题的地址。

【4】修改好以后就可以在main函数中初始化ESP8266了,把ESP8266_Init(115200);添加到main函数中去,事实上这是串口2的初始化。

【5】下一步,添加ESP8266_STA_MQTTClient_Test();函数到main函数中,这个函数的执行就是把上面的MQTT连接指令从串口2中发送出去,如果上面的修改是严格按照规定操作的,这个函数运行完ESP8266就已经连接到阿里云了。

【6】阿里云的设备已经在线,这时候来使用ESP8266_MQTTPUB_ME(A,B,C,D,E,F,G);函数,其中入口参数为char型,一种int型、float型转char型以及回转方法_@于千的博客-CSDN博客,所以无论想要发送什么数据都要转为char型来发送,而在阿里云添加的物模型数据可以是任意格式,这之间没有冲突,如下图:

 通常先int、float一个变量,当控制器检测到数据时,赋值给它,再把它转换为char型的字符串A、B、C等等,在执行ESP8266_MQTTPUB_ME(A,B,C,D,E,F,G);函数,数据就被发送到阿里云上啦!

链接:mqtt.c mqtt.h
提取码:0723

链接:esp8266.c esp8266.h
提取码:0723

有关一种STM32F1系列+ESP8266使用MQTT连接阿里云的方法的更多相关文章

  1. STM32读取串口传感器数据(颗粒物传感器,主动上传) - 2

    文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,

  2. ruby-on-rails - 有没有一种工具可以在编码时自动保存对文件的增量更改? - 2

    我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功

  3. ruby-on-rails - Rails 单选按钮 - 模型中多列的一种选择 - 2

    我希望用户从一个模型的三个选项中选择一个。即我有一个模型视频,可以被评为正面/负面/未知目前我有三列bool值(pos/neg/unknown)。这是处理这种情况的最佳方式吗?为此,表单应该是什么样的?目前我有类似的东西但显然它允许多项选择,而我试图将它限制为只有一个..怎么办? 最佳答案 如果要使用字符串列,让我们说rating。然后在你的表单中:#...#...它只允许一个选择编辑完全相同但使用radio_button_tag: 关于ruby-on-rails-Rails单选按钮-模

  4. ruby - 在 Ruby 中是否有一种惯用的方法来操作 2 个数组? - 2

    a=[3,4,7,8,3]b=[5,3,6,8,3]假设数组长度相同,是否有办法使用each或其他一些惯用方法从两个数组的每个元素中获取结果?不使用计数器?例如获取每个元素的乘积:[15,12,42,64,9](0..a.count-1).eachdo|i|太丑了...ruby1.9.3 最佳答案 使用Array.zip怎么样?:>>a=[3,4,7,8,3]=>[3,4,7,8,3]>>b=[5,3,6,8,3]=>[5,3,6,8,3]>>c=[]=>[]>>a.zip(b)do|i,j|c[[3,5],[4,3],[7,6],

  5. ruby - 有没有一种 Ruby 方法可以删除初始化程序中的样板代码? - 2

    我写了很多initialize代码,将attrs设置为参数,类似于:classSiteClientattr_reader:login,:password,:domaindefinitialize(login,password,domain='somedefaultsite.com')@login=login@password=password@domain=domainendend有没有更像Ruby的方式来做到这一点?我觉得我在一遍又一遍地编写相同的样板设置代码。 最佳答案 您可以使用rubyStruct:classMyClass或

  6. ruby-on-rails - 如何使用 globalize 和 rails 4 以一种形式显示所有翻译字段 - 2

    在使用rails4和https://github.com/globalize/globalize的情况下,我应该如何为我的模型编写表单?用于翻译。我想以一种形式显示所有翻译,如下例所示。我在这里找到了解决方案https://github.com/rilla/batch_translations但我不知道如何实现它。这个“批量翻译”是一个gem还是什么?以及如何安装它。EditingpostEnglish(defaultlocale)SpanishtranslationFrenchtranslation 最佳答案 批处理翻译gem很旧

  7. ruby - 一种语言如何被自身解释(如 Rubinius)? - 2

    我使用Ruby编程已经有一段时间了,现在只使用Ruby的标准MRI实现,但我一直对我经常听到的其他实现感到好奇。前几天我在读有关Rubinius的文章,这是一个用Ruby编写的Ruby解释器。我试着在不同的地方查找它,但我很难弄清楚这样的东西到底是如何工作的。我在编译器或语言编写方面从来没有太多经验,但我真的很想弄明白。一门语言究竟如何才能被自己解释?编译中是否有一个我不明白这有意义的基本步骤?有人可以像我是个白痴一样向我解释这个吗(因为无论如何这都不会太离谱) 最佳答案 它比你想象的要简单。Rubinius并非100%用Ruby编

  8. ruby-on-rails - ruby 真的是一种完全面向对象的语言吗? - 2

    Ruby是完全面向对象的语言。在ruby​​中,一切都是对象,因此属于某个类。例如5属于Objectclass1.9.3p194:001>5.class=>Fixnum1.9.3p194:002>5.class.superclass=>Integer1.9.3p194:003>5.class.superclass.superclass=>Numeric1.9.3p194:005>5.class.superclass.superclass.superclass=>Object1.9.3p194:006>5.class.superclass.superclass.superclass.su

  9. 物联网MQTT协议详解 - 2

    一、什么是MQTT协议MessageQueuingTelemetryTransport:消息队列遥测传输协议。是一种基于客户端-服务端的发布/订阅模式。与HTTP一样,基于TCP/IP协议之上的通讯协议,提供有序、无损、双向连接,由IBM(蓝色巨人)发布。原理:(1)MQTT协议身份和消息格式有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。MQTT传输的消息分为:主题(Topic)和负载(payload)两部分Topic,可以理解为消息的类型,订阅者订阅(Su

  10. STM32的HAL和LL库区别和性能对比 - 2

    LL库和HAL库简介LL:Low-Layer,底层库HAL:HardwareAbstractionLayer,硬件抽象层库LL库和hal库对比,很精简,这实际上是一个精简的库。LL库的配置选择如下:在STM32CUBEMX中,点击菜单的“ProjectManager”–>“AdvancedSettings”,在下面的界面中选择“AdvancedSettings”,然后在每个模块后面选择使用的库总结:1、如果使用的MCU是小容量的,那么STM32CubeLL将是最佳选择;2、如果结合可移植性和优化,使用STM32CubeHAL并使用特定的优化实现替换一些调用,可保持最大的可移植性。另外HAL和L

随机推荐