草庐IT

ESP32 AT指令模式连接百度云天工物接入

爱出名的狗腿子 2023-04-19 原文

ESP32 AT指令模式连接百度云天工物接入

文章目录

1. 前言

​ ESP32是乐鑫公司的一款 WiFi+蓝牙双模组,通过使用ESP32可以轻松快速的将设备接入物联网云平台。

​ ESP32模组支持 IDF 开发和 AT 指令开发两种方式。

IDF开发,也即直接片上编程进行二次开发,这种方式开发和普通的MCU开发十分相似,底层基于FreeRTOS实时操作系统+LwIP协议栈;
AT指令开发,这种方式开发更加简单,官方提供了一个AT指令固件,将此固件烧录在ESP32中,即可通过串口控制ESP32完成一系列的配网联网功能,不用管内部细节如何实现。

​ 本文主要讲解如何采用AT指令的模式快速实现连接百度云平台,将设备接入物联网,其他云平台相差也不大,亦可作为参考。

2. 芯片介绍及资料说明

本文采用的芯片是 ESP32-WROOM-32UE,基于 ESP32-DevKitC 开发板。

关于芯片选型可以参考:https://products.espressif.com/#/product-selector?language=zh&names=

芯片资料可以参考:https://www.espressif.com.cn/zh-hans/support/documents/technical-documents

ESP32-DevKitC开发板资料:https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/hw-reference/esp32/get-started-devkitc.html

关于ESP32-DevKitC开发板,最重要的是这张图:(注意:根据esp32-wroom-32e_esp32-wroom-32ue_datasheet_cn.pdf 手册上说明,最新的ESP32-WROOM-32UE芯片D0 D1 D2 D3 CMD SCK 引脚实际上是没有接出来的)

ESP32 IDF开发指南参考:https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/get-started/index.html#id2

ESP32 AT指令开发指南参考:https://docs.espressif.com/projects/esp-at/zh_CN/latest/esp32/Get_Started/What_is_ESP-AT.html

综上,可以看出其实ESP32在文档这块的资料做的还是十分充分的,这也是国内各大芯片厂商所值得学习的一个方面。

3. 连接云平台

3.1 下载AT固件

  1. 下载烧录软件:(Flash下载工具 Windows)https://www.espressif.com.cn/zh-hans/support/download/other-tools

  2. 下载AT固件包:https://docs.espressif.com/projects/esp-at/zh_CN/latest/esp32/AT_Binary_Lists/ESP32_AT_binaries.html

  3. 硬件连接:https://docs.espressif.com/projects/esp-at/zh_CN/latest/esp32/Get_Started/Hardware_connection.html

    • 由于我们这里采用是 ESP32-WROOM-32UE,因此参考 ESP32-WROOM 系列硬件连接
    • 注意下载串口和AT指令控制串口为不同的串口
  4. 下载指导说明:https://docs.espressif.com/projects/esp-at/zh_CN/latest/esp32/Get_Started/Downloading_guide.html#at

3.2 AT指令测试

采用AT指令的串口进行AT指令测试,注意AT指令的串口与下载所使用的串口不一致

  • 发送:

    AT

  • 回复:

    OK

说明测试OK,AT固件烧录成功,发送的时候注意勾选**“发送新行”**,esp32通过检测 \r\n 作为指令结束

3.3 连接网络

连接网络采用SmartConfig对ESP32模组进行智能配网,当然也可以直接将 WiFi 名和 WiFi 密码发送给ESP32进行指定连接,但是在实际产品中,每个客户的网络均不一样,因此采用智能配网的模式更加通用。

WiFi指令集参考:https://docs.espressif.com/projects/esp-at/zh_CN/latest/esp32/AT_Command_Set/Wi-Fi_AT_Commands.html#at-cwjap-ap

SmartConfig 手机客户端(ESP-TOUCH for Android or IOS):https://www.espressif.com.cn/zh-hans/support/download/apps

SmartConfig 相关资料:https://www.espressif.com.cn/zh-hans/support/documents/technical-documents?keys=ESP-TOUCH

  1. 设置 WiFi 模式为 Station 模式,指令:

    AT+CWMODE=1

  2. 开启SmartConfig进行配网(可调用 AT+CWSTOPSMART 停止 SmartConfig,然后再执行其他命令。注意,在 SmartConfig 过程中请勿执行其他命令),指令:

    AT+CWSTARTSMART

  3. 手机连接对应 WiFi,打开对应的配网APK,进行配网(注意ESP32只能连接到2.4G网络上,无法连接到5G网络),连接成功之后,串口上会有连接信息确认

  4. 配网完成,关闭SmartConfig

    AT+CWSTOPSMART

  5. 查询WiFi连接状态和WiFi信息

    AT+CWSTATE?

  6. 查询Station模式IP信息

    AT+CIPSTA?

  7. 通过SNTP获取网络时间
    设置SNTP服务器

    AT+CIPSNTPCFG=1,8,“pool.ntp.org”

    获取实时时间

    AT+CIPSNTPTIME?

3.4 配置云平台

  1. 登录百度云服务器平台
  2. 进入物联网核心套件IOT Core
  3. 在百度云物联网核心套件创建实例,创建设备等操作,具体有关这块怎么实现,云平台均有详细的文档说明,根据对应的文档实现即可,以百度云平台为例,可以参考:https://cloud.baidu.com/doc/IoTCore/s/pk7ophcd8,创建完之后如下图所示:

3.5 配置MQTT连接云平台

3.5.1 MQTT.fx 连接云平台

  1. 首先采用 MQTT.fx 上位机软件进行对云平台进行测试,关于MQTT.fx软件的下载可以自行上网搜索

  2. 根据云平台的数据,获取以下几个重要连接信息

    • Broker 地址
    • MQTT 用户名
    • MQTT 密码

    关于此数据的构成,每个云平台都不一样,但是每个云平台的文档说明中均有详细描述,以百度云为例,打开对应设备,查看有关信息,之后通过在线生成器生成上述关键信息,在线生产器链接地址:在线生产器

  3. 采用上述信息,使用MQTT.fx软件接入云平台

  4. 订阅主题测试

  5. 往主题发布消息,测试能否接收

3.5.2 ESP32 连接云平台

  1. 采用3.5.1章节同样的方式,将云端的ESP32所对应的设备,通过在线生产器 工具,计算对应的连接信息

  2. 设置MQTT用户属性

    AT+MQTTUSERCFG=0,1,“esp32_dev1”,“mqtt_name”,“mqtt_password”,0,0,“”

    上述指令内有关信息需要根据自己的设备信息进行修改,关于指令格式可以参考:配置 MQTT 用户属性

  3. 连接 MQTT Broker

    AT+MQTTCONN=0,<“host”>,<port>,1

    上述指令内有关信息需要根据自己的设备信息进行修改,关于指令格式可以参考:连接 MQTT Broker

  4. 订阅主题

    AT+MQTTSUB=<LinkID>,<topic">,<qos>

    上述指令内有关信息需要根据自己的设备信息进行修改,关于指令格式可以参考:订阅 MQTT Topi,注意这里订阅的主题需要是你在云端已经配置好的主题,否则会失败,这里我们订阅主题名为 iot/esp32_dev1/user/test

  5. 往主题发送数据

    AT+MQTTPUB=<LinkID>,<“topic”>,<“data”>,<qos>,<retain>

    上述指令内有关信息需要根据自己的设备信息进行修改,关于指令格式可以参考:发布 MQTT 消息(字符串)

4. 补充说明

如果需要完成多个设备之间的通讯,多个设备可以订阅相同的主题,当然这些设备需要在一个实例下面,我们可以自己创建一个主题,由于我们的上位机 Mqtt.fx 和ESP32两个云端的设备都有这个主题,因此可以通过此主题实现上位机 Mqtt.fx 和ESP32的通讯,当然还可以使用规则引擎通过云端完成数据的转发等处理,以及在上述中我们往iot/esp32_dev1/user/test 主题发布一条消息,结果收到了两条消息,这都是于云平台有一定关系的,不同的云平台大体上相差不多,但是细节上有些许差异,大家可以通过查阅对应的平台文档进行查看,此外,遇到问题,还可以通过提交工单的方式,后台会有技术人员进行解决。

以上便是关于如何使用ESP32 AT指令的方式如何接入云平台了,希望本文章能真正帮助到有需要的人,在此过程中你可能遇到各种奇怪的问题,发挥你的主观能动性,通过各种方法总能找到解决方案,加油!

创作不易,转发请注明出处,点赞收藏+关注,找我不迷路!

有关ESP32 AT指令模式连接百度云天工物接入的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  3. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  4. ruby - 如何在续集中重新加载表模式? - 2

    鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende

  5. 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].有没有一种方法可以

  6. 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上找到一个类

  7. ruby - 是否有用于序列化和反序列化各种格式的对象层次结构的模式? - 2

    给定一个复杂的对象层次结构,幸运的是它不包含循环引用,我如何实现支持各种格式的序列化?我不是来讨论实际实现的。相反,我正在寻找可能会派上用场的设计模式提示。更准确地说:我正在使用Ruby,我想解析XML和JSON数据以构建复杂的对象层次结构。此外,应该可以将该层次结构序列化为JSON、XML和可能的HTML。我可以为此使用Builder模式吗?在任何提到的情况下,我都有某种结构化数据-无论是在内存中还是文本中-我想用它来构建其他东西。我认为将序列化逻辑与实际业务逻辑分开会很好,这样我以后就可以轻松支持多种XML格式。 最佳答案 我最

  8. unity---接入Admob - 2

    目录1.AdmobSDK下载地址2.将下载好的unityPackagesdk导入到unity里​编辑 3.解析依赖到项目中

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

  10. ruby - 导轨 4 : column reference "updated_at" is ambiguous with Postgres - 2

    我正在尝试使用“updated_at”字段的日期时间范围查询数据库。前端在JSON数组中发送查询:["2015-09-0100:00:00","2015-10-0223:00:00"]在RailsController中,我使用以下方法将两个字符串解析为DateTime:start_date=DateTime.parse(params[:date_range_arr][0])end_date=DateTime.parse(params[:date_range_arr][1])#...@events=@events.where('updated_atBETWEEN?AND?,start_d

随机推荐