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

前言

最近折腾项目,需要用到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.rhkb.cn/news/397345.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# winform 三层架构增删改查,(删除篇)

一.留言 C# wnform 三层架构增删改查&#xff0c;本篇是增删改查是删除篇&#xff0c;也就增删改查外加一个登录更新完&#xff0c;后续考虑出一个增删改查就是不用三层架构&#xff0c;在uI里面 直接写完&#xff0c;并且放一个帮助类&#xff0c;基本十分钟可以写完一套增删…

数据保存--总结

目录 Excel Excel--openpyxl mysql Excel Excel--openpyxl ... mysql

快速幂、矩阵快速幂

乘法快速幂&#xff1a; P1226 【模板】快速幂 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import ja…

【C#】一个项目移动了位置,或者换到其他电脑上,编译报错 Files 的值“IGEF,解决方法

文章目录 1 问题分析2 本文解决方法 一个项目可以正常运行编译的项目&#xff0c;所有路径均为相对路径。 移动了位置&#xff0c;或者换到其他电脑上&#xff0c;编译报错 Files 的值“IGEF&#xff0c; 1 问题分析 这个错误信息表明在处理文件时&#xff0c;Files 的值出…

(限时免费)震惊!流落人间的haproxy宝典被找到了!一切玄妙尽在此处!

目录 haproxy七层代理详解一、负载均衡1.1 什么是负载均衡1.2 为什么使用负载均衡1.3 负载均衡类型1.3.1 硬件负载1.3.2 四层负载1.3.3 七层负载1.3.4 四层与七层的区别 二、haproxy介绍2.1 haproxy简介2.2 haproxy特性 三、haproxy详细部署3.1 实验所用的环境3.2 软件安装3.3 …

C语言 | Leetcode C语言题解之第330题按要求补齐数组

题目&#xff1a; 题解&#xff1a; int minPatches(int* nums, int numsSize, int n) {int patches 0;long long x 1;int index 0;while (x < n) {if (index < numsSize && nums[index] < x) {x nums[index];index;} else {x << 1;patches;}}retu…

【HarmonyOS NEXT星河版开发学习】小型测试案例06-小红书卡片

个人主页→VON 收录专栏→鸿蒙开发小型案例总结​​​​​ 基础语法部分会发布于github 和 gitee上面&#xff08;暂未发布&#xff09; 前言 在鸿蒙&#xff08;HarmonyOS&#xff09;开发中&#xff0c;自适应伸缩是指应用程序能够根据不同设备的屏幕尺寸、分辨率和形态&…

气象大数据案例项目(求各气象站的平均气温)

气象大数据案例项目&#xff08;求各气象站的平均气温&#xff09; 一、项目需求二、数据格式三、项目开发3.1 在windows 进行开发3.2 运行结果3.3 对项目打包 一、项目需求 现在有一份来自美国国家海洋和大气管理局的数据集&#xff0c;里面包含近30年每个气象站、每小时的天…

WSL2 最新最全帮助小白一步步详细安装教程

文章目录 一、前言1.1、什么是 WSL &#xff1f;1.2、WSL2 相比传统虚拟机的优势1.3、微软官方 二、安装步骤*2.1、启用 WSL 功能2.2、重启电脑2.3、dos命令自动安装 (一行命令搞定&#xff0c;非常方便)2.3.1、通过 cmd 打开 dos 命令行 或者 WIN键 R&#xff1a;2.3.2、输入…

探案录 | 在线打补丁,运维更轻松

清晨&#xff0c;曙光温柔地洒落在福尔摩斯K那标志性的书房内&#xff0c;福尔摩斯K坐在他那张熟悉的扶手椅上&#xff0c;眼神锐利如鹰&#xff0c;正沉浸在思考的海洋中。门突然被推开&#xff0c;华生K带着一丝急切步入室内。 “福尔摩斯K&#xff0c;这次案件非同小可&…

如何在线观看汤姆克鲁斯、比莉艾利什、红辣椒乐队、HER等明星的奥运闭幕式

2024 年巴黎奥运会将以一系列众星云集的表演者为结尾&#xff0c;他们将帮助将奥运会移交给洛杉矶——以下是在线直播盛大决赛的时间和地点。 经过两周多令人惊叹的田径运动、激烈的比赛和表情包活动后&#xff0c;2024 年巴黎奥运会即将落下帷幕。 奥运会闭幕式将于 8 月 12 …

【C++】 特殊类设计:从构思到实现,引领设计新潮流

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;C从入门到精通 目录 &#x1f680; 前言 一&#xff1a; &#x1f525; 不能被拷贝的类 二&#xff1a; &#x1f525; 只能在堆上创建对象的类 三&#xff1a; &#x1f525; 只能在栈上创建对象的…

uniapp使用echarts在H5上显示报错问题的解决方法

前言 在做uniapp vue3开发的echarts图表的时候&#xff0c;发现在浏览器上面正常运行&#xff0c;但在微信开发者工具上显示报错了&#xff0c;报错如下 原因&#xff1a;在微信小程序中&#xff0c;使用document.getElementById会报错&#xff0c;因为小程序的运行环境是基于…

目前最强的文生图模型?!FLUX完全解读!附体验地址

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;专注于分享AI全维度知识&#xff0c;包括但不限于AI科普&#xff0c;AI工…

css rem之2024

话题开始前 我们都知道1rem是等于html fontSize标签的字体大小的&#xff0c;我们主要用来做移动端网页设计稿等比例在手机上面的显示。 看到的问题 这个html fontsize的大小是通过js动态计算的&#xff0c;而这个js的运行时晚于html渲染的&#xff0c;所以会导致一个问题&am…

python网络爬虫使用代理

Python网络爬虫使用代理的实用指南 在网络爬虫的开发过程中&#xff0c;使用代理是一个非常重要的环节。代理不仅可以帮助爬虫绕过反爬虫机制&#xff0c;还能保护开发者的隐私。本文将介绍如何在Python中使用代理进行网络爬虫&#xff0c;包括基本的设置和示例代码。 1. 代理…

WordPress多用途电子商务博客新闻主题betheme 21.5.6版本

简介&#xff1a; WordPress多用途电子商务博客新闻主题betheme 21.5.6版本 自带500多套模板 BeTheme第一次发布于2014年5月21日&#xff0c;自那时以来&#xff0c;已有数以百万计的人下载了BeTheme&#xff0c;其评分为4.8。 这个主题是WooCommerce支持的&#xff0c;在此…

Git代码管理规范

1. 简介 git 分支分为集成分支、功能分支和修复分支&#xff0c;分别命名为 develop、feature 和 hotfix&#xff0c;均为单数。不可使用 features、future、hotfixes、hotfixs 等错误名称。 master&#xff08;主分支&#xff0c;永远是可用的稳定版本&#xff0c;不能直接在…

mybatis xml 动态sql相关语法

<?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace"com.xiaKangan.mapper.EmpMapper&qu…

JavaScript 文档元素获取

目录 通过id获取文档元素 任务描述 相关知识 什么是DOM 文档元素 节点树 通过id获取文档元素 编程要求 通过类名获取文档元素 任务描述 相关知识 通过类名获取文档元素 编程要求 通过标签名获取文档元素 任务描述 相关知识 通过标签的名字获取文档元素 获取标…