草庐IT

[ESP8266]刷MQTT固件以及连接服务器失败的问题解决

我Bu秃头 2023-09-29 原文

摘要:很多小伙伴在初期学习ESP8266 WIFI模块时会遇到很多的问题。其中主要包括:应该给ESP8266模块刷什么固件版本合适、STM32下位机应该怎样编写驱动程序以及大家可能都遇到过的连接服务器失败等问题。由于博主本人在学习使用ESP8266 WIFI模块初期也遇到过类似的问题,现在博主将这些解决经验分享给有需要的小伙伴们。博主给ESP8266 WIFI模块刷的MQTT固件,因此下面也主要给大家介绍一下刷MQTT固件的流程以及解决连接服务器失败的问题。

一、给ESP8266刷鞋MQTT固件

1.1 ESP8266 WIFI模块的选择

博主买的是德飞莱的ESP-12S WIFI模组,如下图。其实买哪个模组不重要,主要的是WIFI模块的型号。刷MQTT固件需要的flash相较于其它的要大一点,因此需要选择稍大一点的型号模组,官方提供的MQTT固件主要也是适配于12S的模块。因此博主也建议使用ESP-12S型号。

虽然博主使用的是德飞莱的WIFI模块,但是不建议购买这个这个模块,因为他刷固件不方便啊,而且淘宝官方店还给没有接线的原理图!!!!当时下这个固件折磨了我好久。所以建议大家购买那种flash大一点,把刷驱动的引脚留出来的模块。

1.2 MQTT固件下载

由于博主使用的WIFI模块是用的安信可科技的32模组,所以可以在安信可官网资料里面下载MQTT固件包。选择固件号:1112的透传固件,下载。大家可以点击下面的连接直接跳转到该网页进行下载:https://docs.ai-thinker.com/%E5%9B%BA%E4%BB%B6%E6%B1%87%E6%80%BB

1.3 辅助工具安装下载 

1.3.1 刷固件工具 :flash_download_tool

现在给ESP8266刷写新固件差不多也基本上用的是这个flash_download_tool工具,其界面如图:

下载连接我就不贴了,网站上搜索一大把,或者也可以下载我上传的资源包,里面包含了所有所需要的工具、MQTT固件,以及STM32成功连接服务器的例程,还有我总结的一些使用注意事项。

 1.3.2 数据生成平台

博主使用的是阿里云物联网开发平台。因此大家如果不会阿里云物联网开发平台的话可以参考这位非常厉害的博主教程:https://blog.csdn.net/u014779536/article/details/106328156

登录阿里云服务器需要正确的连接参数,大家可能接触过不同的服务器连接参数输出工具,有离线网页的,有单独.exe软件的,在这里博主本人非常推荐一款连接参数输出工具:阿里云物联平台配置。他长这样:

 由于过了太久,我也找不到当初的下载连接在哪了,所以我也只能将这个打包放在上传的资源包里了。至于我为什么非常推荐这个配置功能,我后面会讲到。

 1.3 固件烧录方法

①.进入固件烧录软件后,根据ESP8266 flash内容大小选择相应的配置。点击第一行空白处的右侧的‘"...",选择需要烧录的固件,右侧的空白框填写"0x0000"。弄好后,记住在左侧的空白小框中勾选上这一行,勾选中后,这一行显示绿色。

②由于博主的模块没有将烧录引脚引出,所以还得借助杜邦线手动连接才行。

刷固件时需要将RST、IO0两个引脚同时接地,点击 "START",此时显示错误错,松开RST引脚,使其悬空,但是IO0引脚继续接地,然后再次点击 "START"开始烧录便成功了。如下图:

 同时附上ESP8266引脚图:

1.4 MQTT固件测试

大家根据自己生成的信息,使用下列AT指令测试MQTT固件是否刷入成功。以下代码也是ESP 8266 WIFI模块登录云服务器的指令流程。大家在测试登录阿里云服务器时,最好是先将单独的WIFI模块成功接入阿里云服务器后再进行加入STM32单片机的操作。

二、关于ESP8266连接服务器失败的解决

2.1 模块登录服务器失败

相信很多小伙伴都遇到过连接服务器失败的情况,其返回报错信息如下:

+MQTTDISCONNECTED:0 ERROR

官方给出MQTT使用手册中给出了这样相关的内容:

 其大致意思是说:

一般情况下,AT MQTT命令会在10秒内响应,但AT+MQTTCONN命令除外。例如,如果路由器无法访问internet,则AT+MQTTPUB命令会在10秒内响应。但是AT+MQTTCONN命令可能需要更多的时间,因为在不良的网络环境中需要重传数据包。.如果AT+MQTTCONN基于TLS连接,每个包的超时为10秒,则根据握手包计数,总超时将长得多。

当MQTT连接结束时,将提示消息+MQTTDISCONNECTEd:<LinkID>。

当MQTT连接建立时,它将提示消息+MQTTCONNECTED:<LinkID>“<scheme><”主机“>,端口,<”路径“>,<reconnect>

简单的说就是,使用AT+MQTTCONN命令时,断开连接或者主动连接失败都会返回+MQTTDISCONNECTEd:<LinkID> 错误内容。

关键来了:

连接服务器时之所以会报错的原因就是出在利用 物联平台配置工具生成的PASSWORD不正确

其正确的做法是:

①在建立好阿里云物联网平台的物理模型后,将设备的三元组复制到物联平台配置工具中

②Cilentld 随便填,5位;TimeStamp不要填!!!,不然生成密码有误!!!

③再将生成的密码等参数重新进行MQTT AT测试。然后你就会发现,此时WIFI模块可以正常连接云服务器了;

由于博主的WIFI模块被拿去做项目了,所以现在暂时不能给大家展示完整的成功连接流程。待过一段时间,我会再来完善这篇文章,将完整的成功连接流程补上。

若使用了这个方法还是没有连接失败,给予各位一下几点建议:

1.仔细检查填入参数配置平台的数据是否正确以及进行MQTT连接时,输入的指令内容是否正确。

2.尝试使用博主使用的参数配置平台。

3.本博主使用的该参数配置平台连接阿里云服务器,没有测试过腾讯云等其它服务器,所以使用其它云服务器的不一定适用哦。

4.坚持不懈,再次百度😊

如果本篇文章对各位小伙伴有帮助的话,可以给博主给个关注和点赞哦!

 最后附上本人总结的ESP8266资源包,里面包含了MQTT固件、刷固件工具、阿里云物联平台配置工具、WiFi模块配合STM32F103C8T6单片机成功连接服务器上传事件的例程以及OLED 0.96显示的例程。如下:

ESP8266连接阿里云服务器开发过程中所有需要用到的软件及开发成功开发例程。-C文档类资源-CSDN下载

 

有关[ESP8266]刷MQTT固件以及连接服务器失败的问题解决的更多相关文章

  1. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  2. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  3. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  4. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  5. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

  6. ruby-on-rails - s3_direct_upload 在生产服务器中不工作 - 2

    在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo

  7. ruby - 无法在 60 秒内获得稳定的 Firefox 连接 (127.0.0.1 :7055) - 2

    我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类

  8. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  9. ruby-on-rails - 在 Rails 中调试生产服务器 - 2

    您如何在Rails中的实时服务器上进行有效调试,无论是在测试版/生产服务器上?我试过直接在服务器上修改文件,然后重启应用,但是修改好像没有生效,或者需要很长时间(缓存?)我也试过在本地做“脚本/服务器生产”,但是那很慢另一种选择是编码和部署,但效率很低。有人对他们如何有效地做到这一点有任何见解吗? 最佳答案 我会回答你的问题,即使我不同意这种热修补服务器代码的方式:)首先,你真的确定你已经重启了服务器吗?您可以通过跟踪日志文件来检查它。您更改的代码显示的View可能会被缓存。缓存页面位于tmp/cache文件夹下。您可以尝试手动删除

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

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

随机推荐