ESP8266与阿里云物联网平台连接

news2024/11/25 2:32:18

前言

最近折腾项目,需要用到ESP8266模块对接阿里云物联网平台,网上感觉十分完善的教程少了一点点,比较折腾我哈哈哈,所以打算自己写一篇。

材料准备

1、ESP8266 WiFi模块 + 数据线

网上随便买一个就好,十块钱左右一个。我购买的是CH340C芯片的。

2、Arduino IDE

3、阿里云平台

ESP8266

 1、连接电脑

        好像有些网上购买的不需要固件烧录。但是我购买的这个要,不然识别不了AT指令。首先使用一根数据线进行ESP8266模块与电脑进行连接。有些模块是Micro口(老式安卓口),有些是TypeC口,根据自己的模块,使用对应的数据线。

        连接好后,检查电脑有没有声音响起,或者可以前往设备管理器查看:

        通过插拔数据线,观察端口是否缺少,如果没有缺少,根据我的经历来说,有如下两种可能(可能还有别的特殊情况,但是暂时没遇到):

  • 驱动没安装
  • 你使用的数据线不支持数据传输 

        对于第一种,可以前往去安装对应芯片的驱动,例如CH340C芯片安装CH340驱动,CP2102芯片安装CP210X驱动。可百度搜索一下。

        对于第二种,换一根数据线即可。

2、固件烧录

        NodeMcu-AT-1.zip - lingshunlab 的分享 (u062.com)

        通过上述连接,可以下载固件烧录软件。下载解压后,在此目录下双击启动:

         选择第一个:

        点击如图:

        找到如下路径的文件进行打开:

         随后按照我的配置勾选,同时在右下角选择自己的模块所占的端口,比如是COM1(端口可在设备管理器查询),波特率选择115200。有些模块背面写的9600默认,忽视它。然后点击START,等待一段漫长的时间。

        等到FINISH的出现,说明固态烧写完成。可以来使用串口助手验证。我这里使用的微软商店的串口调试助手,UI较为简介,界面不像老古董。哈哈哈。

        界面如图所示:

         选择ESP8266对应的端口号,比如我这里是COM7。波特率选择115200.无误之后选择打开。在下方输入框中输入:AT(换行!注意一定要换行),点击右方发送,显示OK就是烧录成功:

阿里云平台

1、注册、登录

        阿里云-计算,为了无法计算的价值 (aliyun.com)

        网站如上,进入后右上角可以注册或者登录。我就不教了。

2、开通物联网平台

        新用户一般是没开通过的,如图点击,一般会让你开通。你就选择开通就好,免费的

3、 创建产品、设备

 

         产品添加好了,接下来添加设备:

        刚添加的设备一般是未激活状态,需要激活才能使用,激活也就是连接MQTT。

 Arduino IDE

1、软件下载、安装

        网上自行下载,这里就不提供了。

2、获取PubSubClient库

        https://github.com/knolleary/pubsubclient

        仓库地址如上,下载src文件下的两个文件,放入自己的工程文件夹中:

3、打开IDE

        在刚下载的两个文件的文件夹中,新建一个.ino文件,用Arduino IDE打开,随后输入:

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include "PubSubClient.h"
#include <Crypto.h>
#include <Arduino.h>
// Update these with values suitable for your network.

using experimental::crypto::SHA256;

// 实例化一个对象 wifiMulti
ESP8266WiFiMulti wifiMulti;

WiFiClient espClient;

PubSubClient client(espClient);

void connetMqtt();
String signHmacSha256(String deviceId, String productKey, String deviceName, String deviceSecret, uint64_t timestamp);
void callback(char *topic, byte *payload, unsigned int length);

const String productKey = "***";                        //替换
const String deviceName = "***";               //替换
const String deviceSecret = "***"; //替换
const String subTopic = "/" + productKey + "/" + deviceName + "/user/get";
const String pubTopic = "/" + productKey + "/" + deviceName + "/user/update";
const String regionId = "cn-shanghai"; //替换自己的区域id
const String serverUrl = productKey + ".iot-as-mqtt." + regionId + ".aliyuncs.com";
const int serverPort = 1883;

const char wifiName[] = "***";//替换
const char wifiPassword[] = "***";//替换

void setup()
{
  // put your setup code here, to run once:
  Serial.begin(115200);

  wifiMulti.addAP(wifiName, wifiPassword);
  Serial.println("");
  Serial.println("start connecting wifi...");

  while (wifiMulti.run() != WL_CONNECTED)
  {
    Serial.print(".");
    delay(1000);
  }
  Serial.println("============connect wifi success============");
  Serial.print("WiFi:");
  Serial.println(WiFi.SSID()); 
  Serial.print("localIP:");
  Serial.println(WiFi.localIP()); 

  connetMqtt();
}

void connetMqtt()
{
  Serial.println("start connect mqtt ....");
  client.setKeepAlive(60); //注意:PubSubClient库的默认keepalive是15s,而官方要求(30~1200s)最小30s,否则会拒绝连接
  client.setServer(serverUrl.c_str(), serverPort);

  String deviceId = String(ESP.getChipId()); //设备芯片唯一序列号
  uint64_t timestamp = micros64();

  String clientId = deviceId + "|securemode=3,signmethod=hmacsha256,timestamp=" + timestamp + "|";
  String password = signHmacSha256(deviceId, productKey, deviceName, deviceSecret, timestamp);
  String username = deviceName + "&" + productKey;
  Serial.print("clientId:");
  Serial.println(clientId);
  Serial.print("username:");
  Serial.println(username);
  Serial.print("password:");
  Serial.println(password);

  client.connect(clientId.c_str(), username.c_str(), password.c_str());

  while (!client.connected())
  {
    /* code */
    delay(2000);
    client.connect(clientId.c_str(), username.c_str(), password.c_str());
    Serial.println("try connect mqtt...");
  }
  Serial.println("ok, mqtt connected!");
  client.subscribe(subTopic.c_str());
  client.setCallback(callback);
}

String signHmacSha256(String deviceId, String productKey, String deviceName, String deviceSecret, uint64_t timestamp)
{
  const char *key = deviceSecret.c_str();
  String data = "clientId" + deviceId + "deviceName" + deviceName + "productKey" + productKey + "timestamp" + timestamp;
  Serial.print("sha256:");
  Serial.println(data);
  return SHA256::hmac(data, key, strlen(key), SHA256::NATURAL_LENGTH);
}

void callback(char *topic, byte *payload, unsigned int length)
{
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  payload[length] = '\0';
  String message = String((char *)payload);
  Serial.println(message);
}

void loop()
{
  // put your main code here, to run repeatedly:
  if (client.connected())
  {
    client.loop(); //心跳以及消息回调等
  }
}

        以上所需信息,都可以在阿里云物联网控制台查找:

        随后,文件——首选项——其他开发板管理地址:填写如下:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

        

        在开发板管理器中,搜索ESP8266,下载如图所示的开发板:

        这个下载巨巨巨巨巨慢,大约要一两个小时。

        下载完后,在工具——开发板——esp8266——Generic ESP8266 Modules。选择好对应的串口,然后点击下方按钮即可编译运行(编译运行可能会提示要下载什么东西,下载就好):

4、运行

        正确运行会显示以下信息:

        在设备列表,也能看见在线。        

验证

        代码里写的默认是订阅: "/" + productKey + "/" + deviceName + "/user/get"

        我们可以在阿里云物联网控制台,点击我们的设备,在Topic列表中,找到这个主题,选择发布信息:

                 

         发布后,我们打开IDE:发现已经收到!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2045748.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

BERT:BidirectionalEncoderRepresentations fromTransformers代码及数据解读

论文地址 写在前面 由于官网给的是TensorFlow版本的&#xff0c;github也有pytorch版本&#xff0c;但是给出的pytorch的代码是需要根据实际情况进行修改的。 词表文件vocab.txt文件读取的问题 vocab.py代码的class WordVocab(Vocab)类中的def load_vocab(vocab_path)函数为…

看看人家都用树莓派5做了什么产品?

文章作者&#xff1a; Aleksandar Dakić 原文地址&#xff1a; https://magazinmehatronika.com/edatec-ed-hmi3020-070c-hmi-recenzija/ Aleksandar Dakić《机电一体化》的杂志主编&#xff0c;同时Aleksandar 也是《机电一体化》杂志的创始人。拥有电气工程背景&#x…

MySQL的安装及配置远程链接(WindowsLinux下安装)

一.Windows下安装 在Windows下安装MySQL需要先去官网下载一下安装包 1. 官网下载地址&#xff1a;www.mysql.com 2、选择下载 往下滑选择MySQL 社区 &#xff08;GPL&#xff09; 下载 3、选择社区版适配Windows系统 MySQL Installer for Windows 4、选择本地安装版本 my…

十五年以来 — 战略性云平台服务的演进路径之全面呈现(含亚马逊、微软和谷歌)

Gartner每年都发布对全球IaaS平台进行评估的魔力象限报告。2023年底&#xff0c;Gartner将此项评估的名称改为“战略性云平台服务”&#xff08;Strategic cloud platform services&#xff09;&#xff0c;尽管其核心仍为IaaS&#xff0c;但是&#xff0c;毫无疑问&#xff0c…

算法工程师必知必会的数学基础之微积分下篇

系列文章&#xff1a; 第一篇&#xff1a;算法工程师必知必会的数学基础之线性代数第二篇&#xff1a;算法工程师必知必会的数学基础之微积分上篇第三篇&#xff1a;算法工程师必知必会的数学基础之微积分下篇&#xff08;本文&#xff09; 文章目录 2. 微积分2.7 泰勒级数&am…

【大模型从入门到精通24】开源库框架LangChain Embedding的力量1

这里写目录标题 嵌入的力量什么是嵌入&#xff1f;创建嵌入的详细过程嵌入在语义搜索中的应用向量存储&#xff1a;相似向量的有效检索关键特性与操作选择向量存储的标准示例&#xff1a;Chroma 适用于快速原型开发和小型数据集结论 嵌入的力量 什么是嵌入&#xff1f; 嵌入是…

通过CLIP引导解码减轻大型视觉-语言模型中的幻觉问题

人工智能咨询培训老师叶梓 转载标明出处 大型视觉-语言模型&#xff08;LVLMs&#xff09;因其在视觉推理方面的能力而备受瞩目&#xff0c;被视为实现自主操作智能体的重要里程碑。但它在生成文本时容易出现对象幻觉问题&#xff0c;即描述中包含不存在的对象&#xff0c;这严…

一文带你入门大模型微调

大模型相关目录 大模型&#xff0c;包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步&#xff0c;扬帆起航。 swift与Internvl下的多模态大模型分布式微调指南&#xff08;附代码和数据&#xff…

MTK 相机功耗拆解方法

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、硬件功耗二、相机软件功耗三、参考文档 一、硬件功耗 1.1 硬件信息 以下硬件信息最好提前获取到 模块备注平台MTK or Qcom or sprdCPU频率大中小核…

【Qt开发】事件与信号/事件过滤器

事件与信号/事件过滤器 事件一、事件的产生二、事件的派发三、事件类和事件类型四、事件的处理 事件与信号事件过滤器 事件 Qt系统的图形化窗口是由事件驱动的。&#xff0c;点击鼠标、按键&#xff0c;改变窗口大小、最小化窗口、关闭窗口等都会产生相应的事件。 QWidget类的所…

shuashuashua

CVE-2023-2130 靶标介绍&#xff1a; 在SourceCodester采购订单管理系统1.0中发现了一项被分类为关键的漏洞。受影响的是组件GET参数处理器的文件/admin/suppliers/view_details.php中的一个未知函数。对参数id的操纵导致了SQL注入。可以远程发起攻击。 通过标靶介绍可以知道…

通过域名和HTTPS上线MSF

使用受信任证书的Meterpreter载荷 现在大多数安全解决方案还会通过分析进出目标机器的流量来进行网络入侵检测。在这种情况下&#xff0c;很可能即使使用编码器绕过了防病毒软件&#xff0c;但有效载荷也会在尝试连接到我们的侦听器时被捕获和拦截。 # 准备工作 首先需要准备…

FPGA开发——UART回环实现之接收模块的设计

一、简介 因为我们本次进行串口回环的实验的对象是FPGA开发板和PC端&#xff0c;所以在接收和发送模块中先编写接收模块&#xff0c;这样可以在后面更好的进行发送模块的验证。&#xff08;其实这里先编写哪个模块&#xff09;都不影响&#xff0c;这里看自己心情&#xff0c;反…

大语言模型微调框架Unsloth:简化模型微调流程,提升模型性能

Unsloth 将 Llama-3、Mistral、Phi-3 和 Gemma 等大型语言模型的微调速度提高了 2 倍&#xff0c;内存使用量减少了 70%&#xff0c;而且准确性不会降低&#xff01; 特点 通过手动派生所有计算繁重的数学步骤和手写 GPU 内核&#xff0c;unsloth 可以在不更改任何硬件的情况…

IMU助力跑步参数评估

近期&#xff0c;中国研究团队开发了一种创新的跑步参数评估方法&#xff0c;巧妙结合了IMU和多模态神经网络技术&#xff0c;旨在深入研究并有效评估跑步时的步态参数。 科研团队采用IMU传感器&#xff0c;将其固定在跑者的脚踝处&#xff0c;以实时监测并记录跑步时脚踝的加速…

如何利用RPA自动化流程机器人优化企业财务流程

随着企业规模的扩大和业务的复杂性增加&#xff0c;财务流程管理成了一个关键而复杂的任务。传统的财务流程往往涉及大量的重复性、繁琐的工作&#xff0c;不仅效率低下&#xff0c;而且容易出错。为了解决这些问题&#xff0c;越来越多的企业开始引入RPA机器人流程自动化来优化…

JAVA集中学习第五周学习记录(二)

系列文章目录 第一章 JAVA集中学习第一周学习记录(一) 第二章 JAVA集中学习第一周项目实践 第三章 JAVA集中学习第一周学习记录(二) 第四章 JAVA集中学习第一周课后习题 第五章 JAVA集中学习第二周学习记录(一) 第六章 JAVA集中学习第二周项目实践 第七章 JAVA集中学习第二周学…

打开Office(word、excel、ppt)显示操作系统当前的配置不能运行此应用程序最全解决方案!

我以前用过分区助手把office从c盘挪到d盘了&#xff0c;从那以后office就用不了了&#xff0c;然后我就删了&#xff08;貌似没删干净&#xff09;。 最近由于有使用word的需求&#xff0c;所以我从学校官网找到正版软件的安装包&#xff0c;按照步骤重新卸载电脑中office残留…

基于Java的民宿管理系统

TOC springboot306基于Java的民宿管理系统 第1章 绪论 1.1选题动因 当前的网络技术&#xff0c;软件技术等都具备成熟的理论基础&#xff0c;市场上也出现各种技术开发的软件&#xff0c;这些软件都被用于各个领域&#xff0c;包括生活和工作的领域。随着电脑和笔记本的广泛…

【Mac】Downie 打开提示试用的解决办法?

前情 我们在使用 Downie 的时候&#xff0c;可能遇到提示试用的问题&#xff0c;如下图所示。 原因 旧版本的 Downie 没有卸载干净导致的。 解决办法 先使用 AppCleaner 卸载掉电脑上的 Downie 旧版本软件&#xff0c;必须使用 AppCleaner 卸载。重新安装 Downie 即可。