草庐IT

(过程超详细)适合新手的ATK-ESP8266+STM32F103系列单片机通过MQTT协议直连阿里云的教程

技术小董 2024-07-19 原文

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

本教程适合第一次玩阿里云的小伙伴,当然需要一定的C语言基础+库函数的调试经验,所有例程都是库函数来着。另外,本教程是基于本人的调试过程,参考了很多大佬的调试经验,如OnePiece&。很多东西,比如MQTT协议我也只是懂一部分,但是关于MQTT协议在代码中的实现,本教程可以以简单明了的方式教会你只需要改几个特定的参数就能实现与任何你新创建的简单产品的互联。码字不易,代码和所有此过程中要用到的东西均会在本篇文章发布完成后以资源包形式上传,请勿找我用邮箱发送,无需付费只需积分下载。
这里推荐一个关于MQTT协议的视频链接,想去听的可以去听一听,很有用,适合关于MQTT协议的入门了解。

https://www.bilibili.com/video/BV1k4411q7Cc?p=33&vd_source=2d589e389bf136cab5cd19c6640c6e3a


一、所用到的硬件设备

1.正点原子的ATK-ESP8266,这个淘宝上很多店都可以买到

2.单片机推荐使用STM32F103RCT6,当然也可以兼容STM32F103C8T6,关于物联网这一块的代码完全兼容C8T6,只是有部分代码我是用来做控制如OLED,BEEP,红外和超声波,这个后面程序介绍里面会讲解一下。
3.普通的USB-TTL的烧录模块
以上就是所需要的所有硬件,另加杜邦线几根即可

二、调试步骤

1.固件的烧录

首先明确一点,我从正点原子的官方技术确认过,一般ATK-ESP8266模块是自带的正点的原子云固件,可以轻松跟原子云联网但是却不支持MQTT的AT指令控制,因此当我们拿到了模块以后,做的第一件事情就是将烧录器件和ESP8266进行连接。
一般我们到手的ESP8266有六个引脚,分别是VCC,GND,TXD,RXD,RST,IO-0。前四个就不赘述,后面的RST代表复位,IO-0代表ESP8266的模式,非低电平的时候是运行模式,低电平的时候是下载固件模式。因此若我们想要下载固件至ESP8266里面,IO-0这个引脚也要接GND,与烧录模块的接法如下:
VCC——————+3.3V或+5V(根据你的模块可承受的供电电压来,我的是兼容两种电压)
GND——————GND
RXD——————TXD
TXD——————RXD
IO-0——————GND

总共五根线,RST不用接,确认好接线无误以后进行下一步。
下一步就是下载什么样的固件和用什么固件下载软件。固件的话自己可以搜MQTT协议AT指令的固件,也可以自己去主流一些连阿里云的商家官网看,如安信可等等,上面有相对应的固件,正点原子官方也提供了固件,但是我没用过,不知道对不对。
我所用的固件如下:

我所使用的固件下载软件如下:

解压后进去双击exe文件,等待自动加载

会出现这么一个界面,选择第一个就行(ESP8266 DownloadTool)

点击进去会出现这么一个画面,你只要把界面弄的跟我一致就行,第一个带感叹号的那里把刚刚截图中的bin文件加载进去,然后@里面填0x00000,下面的选项一致即可

点击下面的START按钮,当你按下START按钮以后,原本绿色带有IDLE等待的按钮会显示等待上电复位,这个时候你需要自己手动把ESP8266模块的VCC线拔下来一下,然后再插回去。这样再按一下START就会开始下载,最下面的进度条就会开始动,动完了以后你的固件就下载成功了。
这个时候不用担心,一般来说固件下载就搞定了,但是你还得验证一下它。
打开安信可的串口调试助手,界面如下:


利用串口发送数据,此处博主因为已经调试完毕,所以就没直接的发送数据界面了,但是连接串口以后,只要点击右上角的已经规定好的数据发送格式发送就可以了,有数据反馈回来就行了,比如AT+RST反馈回来ready就行,记住点一点运行模式,就可以得到了我们想要的结果。在这里固件和测试已经完成了。

2.创造阿里云的产品

当完成了固件的烧录以后,就得着手物联网平台了。这里贴一下阿里云的物联网平台地址
阿里云登录页
注册进去以后会出现这么一个画面(第一次注册可能不是这个样子,点击工作台就好了)

点击公共实例

点击设备管理中的产品,创建产品
进入创建产品界面后,选择如下,当然也可以根据自己实际需求去搜,像温湿度采集单元都是已经集成好的

创建完产品以后选择设备,添加设备到我们刚创建的example产品下

点击确认以后,就会出现这么一个界面,先不用点击完成,先点击一键复制设备证书,这里面有我们设备的三元组信息,没有点击复制设备证书的也没事,等下在设备的界面也可以查看。

粘贴得到的结果如下:

目前设备处于未激活状态

这个时候我们先干一件事情,就是把我们的产品设置一些功能定义,用来发布信息到我们设置的功能上,具体先点击产品,查看我们所创建的产品,再点击功能定义就会进到一个界面里

点击编辑草稿,进入功能编辑页面

点击添加自定义功能

手动搜索温度,设置如图所示。记住,标识符很重要,通过32发信息上传到互联网上需要通过特定的语法去发送信息,而这个temp就是你所指定的信息发送对象,数据类型根据你要发的数据类型所设置

再以同样的方法添加湿度

定义好功能之后,就可以发布上线了,这样在设备里面就能看到你所定义的物模型数据

返回设备页面可清楚的看得物模型数据这里已出现温度和湿度两样,只不过由于还未激活,没有数据发送过来

3.代码修改

第三步就是代码修改环节,总共有三个需要修改的地方,一步一步对照好,就不会出现问题

打开这个文件包里面的代码,需要修改的就三个地方,最上面stm32f10x_it.c的中断函数,以及mqtt.h文件中的三元组,还有wifi.h文件中的wifi名称及密码

mqtt.h需要更改的地方如下图所示,将我们所复制的三元组分别替换箭头处的定义,下面的TOPICname中的第二个和第三个也要替换成跟PRODUCTKEY和DEVICENAME相同。

不知道三元组的可以从自己的设备里面查看,将三元组复制代替
复制以后如下图所示

接下来是wifi.h,将此处的SSID替换成你电脑所连的WIFI名称,PASS为WIFI密码(别来俺家蹭网(* ̄︶ ̄))

最后需要改写的就是stm32f103_it.c里面的中断函数,sprintf里面的shidu和xianshi_status为我上一个设备里面设定的功能定义名称,turang_shidu和xianshi_status是在单片机里面定义的全局变量,在此可替换成你想要传输的数据,如DHT11采集得到的温湿度数据。我们需要进行更改的就是params后面的shidu和xianshi_status两个东西

如图所示,改成跟我们之前功能定义里面相同的两个名称temp和humi

这样软件部分就完成了,下载程序进入单片机

4.最终的硬件连接及效果图

ATK-ESP8266的VCC建议接到单片机引脚的5V上(如果模块兼容5V的话,我3.3V好像有点问题)
ATK-ESP8266的TXD接到PA3
ATK-ESP8266的RXD接到PA2
ATK-ESP8266的RST接到PA4
GND接GND

下载程序后,目前物联网平台还没激活

此时按下单片机的复位键,等待一会儿,刷新一下设备的状态,即会显示在线

我们点击进去查看物模型数据,可见,我们所定义的数据已经传送到网站上,实际应用过程中只需将不断变化的变量按照赋值语句赋值就行了,数据就能不断变化,记得要勾选显示界面右边的实时刷新,这样才能收获一个实时的数据


可通过监控运维里面的日志观看自己的数据是否在刷新,记得产品要选你自己传输数据的产品,想看一次发送的日志就点击重置一下

至此,你的单片机就能够顺利连上阿里云啦

总结

本文只为了实现一个目的,就是让你快速连接上阿里云,将自己想要传输的数据传到阿里云上进行显示。阿里云还有很多功能,比如可以通过阿里云平台下发控制信息到单片机,从而实现某些功能,本质上就是利用MQTT协议进行消息的一个订阅和分发,在我的代码里面有关于下发信息的代码,但由于我本身所做的这个项目只需上传信息但没有下发信息,故未仔细进行调整。至于后面各位朋友如何去利用这个平台玩点花操作,就看大家自己的发挥了,希望大家顺利!!
资源的话点击我的主页查看资源哦,只需要几十个积分下载,里面包含固件和固件下载程序,以及串口下载助手及程序代码。方便的话也可以点点关注哦,在后面的日子我也会同步上传一些自己以前和现在正在做的开源项目,希望大家一起努力一起进步!

有关(过程超详细)适合新手的ATK-ESP8266+STM32F103系列单片机通过MQTT协议直连阿里云的教程的更多相关文章

  1. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  2. ruby-on-rails - 使用一系列等级计算字母等级 - 2

    这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,

  3. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  4. 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.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,

  5. C51单片机——实现用独立按键控制LED亮灭(调用函数篇) - 2

    说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时

  6. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  7. 阿里云国际版免费试用:如何注册以及注意事项 - 2

    作为新的阿里云用户,您可以50免费试用多种优惠,价值高达1,700美元(或8,500美元)。这将让您了解和体验阿里云平台上提供的一系列产品和服务。如果您以个人身份注册免费试用,您将获得价值1,700美元的优惠。但是,如果您是注册公司,您可以选择企业免费试用,提交基本信息通过企业实名注册验证,即可开始价值$8,500的免费试用!本教程介绍了如何设置您的帐户并使用您的免费试用版。​关于免费试用在我们开始此试用之前,您还必须遵守以下条款和条件才能访问您的免费试用:只有在一年内创建的账户才有资格获得阿里云免费试用。通过此免费试用优惠,用户可以免费试用免费试用活动页面上列出的每种产品一次。如果您有多个帐

  8. 阿里云RDS——产品系列概述 - 2

    基础版云数据库RDS的产品系列包括基础版、高可用版、集群版、三节点企业版,本文介绍基础版实例的相关信息。RDS基础版实例也称为单机版实例,只有单个数据库节点,计算与存储分离,性价比超高。说明RDS基础版实例只有一个数据库节点,没有备节点作为热备份,因此当该节点意外宕机或者执行重启实例、变更配置、版本升级等任务时,会出现较长时间的不可用。如果业务对数据库的可用性要求较高,不建议使用基础版实例,可选择其他系列(如高可用版),部分基础版实例也支持升级为高可用版。基础版与高可用版的对比拓扑图如下所示。优势 性能由于不提供备节点,主节点不会因为实时的数据库复制而产生额外的性能开销,因此基础版的性能相对于

  9. ruby - 从结束值创建一系列字符串 - 2

    我使用irb。下面是我写的代码。“斧头”..“bc”我期待"ax""ay""az""ba"bb""bc"但结果只是“斧头”..“bc”我该如何纠正?谢谢。 最佳答案 >puts("ax".."bc").to_aaxayazbabbbc 关于ruby-从结束值创建一系列字符串,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7617092/

  10. ruby - HTTP POST 上的 SSL 错误(未知协议(protocol)) - 2

    尝试通过SSL连接到ImgurAPI时出现错误。这是代码和错误:API_URI=URI.parse('https://api.imgur.com')API_PUBLIC_KEY='Client-ID--'ENDPOINTS={:image=>'/3/image',:gallery=>'/3/gallery'}#Public:Uploadanimage##args-Theimagepathfortheimagetoupload#defupload(image_path)http=Net::HTTP.new(API_URI.host)http.use_ssl=truehttp.verify

随机推荐