Arduino ESP8266 MQTT 阿里 腾讯 连接示例

ESP8266基于Arduino IDE 快速搭建IoT还是很方便的,降低了很多门槛。官方的示例丰富的话,中小学生都能搞物联网了。真希望各大厂能开办这方面的平台,是素质教育平台,也是播种机,长远来看必有收益。

这里的内容就是实践物联网平台可能用到的代码,简单做个对比,抛砖引玉啦。

有兴趣的同学可以参看大厂官方的文档。

腾讯
设备基于 TCP 的 MQTT 接入
https://cloud.tencent.com/document/product/634/32546

void TENCENTIoTSDK::begin(Client& espClient,const char* _productKey,const char* _deviceName,const char* _deviceSecret,const char* _region,long expr)
{//*mqttConnecting = false;if(client != NULL){delete  client;client=NULL;}client = new PubSubClient(espClient);productKey = _productKey;deviceName = _deviceName;deviceSecret = _deviceSecret;region = _region;long times = millis();//# 1. 生成 connid 为一个随机字符串,方便后台定位问题//connid  = "zzz"#RandomConnid(5)String connid = "zzz12";//#RandomConnid(5);//# 2. 生成过期时间,表示签名的过期时间,从纪元1970年1月1日 00:00:00 UTC 时间至今秒数的 UTF8 字符串//expiry  = 1234567890#int(time.time()) + 60 * 60String expiry = String(expr);//exp;//# 3. 生成 MQTT 的 clientid 部分, 格式为 ${productid}${devicename}//clientid = "{}{}".format(productID, devicename)String clientid = "";clientid += productKey ;clientid += deviceName;//# 4. 生成 MQTT 的 username 部分, 格式为 ${clientid};${sdkappid};${connid};${expiry}//username = "{};12010126;{};{}".format(clientid, connid, expiry)String username = clientid + ";12010126;" + connid + ";" + expiry;//# 5. 对 username 进行签名,生成token//secret_key = devicePsk.encode('utf-8')  # convert to bytesString secret_key = deviceSecret;//-----------------------------------//data_to_sign = username.encode('utf-8')  # convert to bytes//secret_key = base64.b64decode(secret_key)  # this is still bytesint inputStringLength = secret_key.length();char sk[inputStringLength + 1];for (size_t i = 0; i < inputStringLength; i++) {sk[i] = deviceSecret[i];}sk[inputStringLength] = 0;int decodedLength = Base64.decodedLength(sk, inputStringLength);char decodedString[decodedLength];Base64.decode(decodedString, sk, inputStringLength);String  data_to_sign = username;//secret_key = base64.b64decode(secret_key);//token = hmac.new(secret_key, data_to_sign, digestmod=hashlib.sha256).hexdigest()String token = hmac256(data_to_sign, decodedString, decodedLength);//# 6. 根据物联网通信平台规则生成 password 字段//password = "{};{}".format(token, "hmacsha256")String password = token + ";hmacsha256";//return {//"clientid" : clientid,//"username" : username,//"password" : password//}strcpy(mqttUsername, username.c_str());strcpy(mqttPwd, password.c_str());Serial.println(clientid);Serial.println(username);Serial.println(password);//设备属性上报//当设备需要向云端上报数据时,开发平台为设备设定了默认的 Topic://上行请求 Topic: $thing/up/property/{ProductID}/{DeviceName}//上行响应 Topic: $thing/down/property/{ProductID}/{DeviceName}//设备订阅能收到下发命令zzz响应和下发是走订阅的同一个主题//$thing/down/property/7IL05FSCJ8/cp1sprintf(TCLINK_TOPIC_PROP_POST, "$thing/up/property/%s/%s", productKey, deviceName);sprintf(TCLINK_TOPIC_PROP_GET, "$thing/down/property/%s/%s", productKey, deviceName);sprintf(TCLINK_TOPIC_SERVICE_GET, "$thing/down/service/%s/%s", productKey, deviceName);sprintf(TCLINK_TOPIC_SHADOW_POST, "$shadow/operation/%s/%s", productKey, deviceName);sprintf(TCLINK_TOPIC_SHADOW_GET, "$shadow/operation/result/%s/%s", productKey, deviceName);sprintf(TCLINK_TOPIC_EVENT_POST, "$thing/up/event/%s/%s", productKey, deviceName);sprintf(TCLINK_TOPIC_EVENT_GET, "$thing/down/event/%s/%s", productKey, deviceName);sprintf(TCLINK_TOPIC_ACTION_POST, "$thing/up/action/%s/%s", productKey, deviceName);sprintf(TCLINK_TOPIC_ACTION_GET, "$thing/down/action/%s/%s", productKey, deviceName);//$shadow/operation/${productId}/${deviceName}//MQTT 服务器连接地址,广州域设备填入:${ ProductId }.iotcloud.tencentdevices.com,//这里 ${ ProductId } 为变量参数,用户需填入创建产品时自动生成的产品 ID,//例如 1A17RZR3XX.iotcloud.tencentdevices.com;端口:8883sprintf(domain, "%s.iotcloud.tencentdevices.com", productKey);Serial.println("setBufferSize:");bool bufok = client->setBufferSize(512);Serial.println(bufok);client->setServer(domain, MQTT_PORT); // 连接WiFi之后,连接MQTT服务器 //client->setCallback(callback);mqttCheckConnect();//*/
}

 阿里
使用MQTT.fx接入物联网平台

https://help.aliyun.com/document_detail/86706.html?spm=a2c4g.11186631.6.791.3cc43a20M64Pa1

void ALIIoTSDK::begin(Client &espClient,const char *_productKey,const char *_deviceName,const char *_deviceSecret,const char *_region)
{mqttConnecting = false;if(client != NULL){delete  client;client=NULL;}client = new PubSubClient(espClient);productKey = _productKey;deviceName = _deviceName;deviceSecret = _deviceSecret;region = _region;long times = millis();String timestamp = String(times);//sprintf(clientId, "%s|securemode=3,signmethod=hmacsha256,timestamp=%s|", deviceName, timestamp.c_str());sprintf(clientId, "%s|securemode=3,signmethod=hmacsha256,timestamp=%s|", deviceName, timestamp.c_str());String signcontent = "clientId";signcontent += deviceName;signcontent += "deviceName";signcontent += deviceName;signcontent += "productKey";signcontent += productKey;signcontent += "timestamp";signcontent += timestamp;//sprintf(clientId, "%s|securemode=3,timestamp=%s,signmethod=hmacsha256|", deviceName, timestamp.c_str());String pwd = hmac256(signcontent, deviceSecret);//sprintf(clientId, "xNhylKuXAG775N3GyTyn|securemode=3,timestamp=1610292470098,signmethod=hmacsha1|");//String pwd = hmacSHA1(signcontent, deviceSecret);//String pwd = "4B00863263E64F77280AA23D22AE291EAFCF5238";strcpy(mqttPwd, pwd.c_str());Serial.println(clientId);Serial.println(signcontent);Serial.println(deviceSecret);Serial.println(pwd);sprintf(mqttUsername, "%s&%s", deviceName, productKey);sprintf(ALINK_TOPIC_PROP_POST, "/sys/%s/%s/thing/event/property/post", productKey, deviceName);sprintf(ALINK_TOPIC_PROP_SET, "$thing/up/property/%s/%s", productKey, deviceName);sprintf(ALINK_TOPIC_EVENT, "/sys/%s/%s/thing/event", productKey, deviceName);sprintf(domain, "%s.iot-as-mqtt.%s.aliyuncs.com", productKey, region);client->setServer(domain, MQTT_PORT); // 连接WiFi之后,连接MQTT服务器client->setCallback(callback);mqttCheckConnect();
}

个人觉得使用腾讯平台开发省一些,毕竟微信啊,小程序啊这么的易上手。能免掉开发app的大工程。

Arduino ESP8266 MQTT 阿里 腾讯 连接示例相关推荐

  1. TencentOS-tiny+ESP8266+mqttclient对接腾讯云平台IoThub

    1. 硬件准备 本文中我准备的腾讯官方EVB_MX_Plus开发板和ESP8266 WIFI通信模组: 2. 云端产品创建 在云端创建产品的过程和下文相同,不再赘述. 小熊派移植TencentOS-t ...

  2. 【单片机笔记】STM32+ESP8266通过AT指令WIFI连接阿里云MQTT服务器

    上一篇使用USB转串口的方式通过ESP8266wifi模块的方式成功连接上了阿里云,现在就要通过单片机来替换电脑上位机了,这样单片机自动的去调用并发送串口数据更加方便,也更加符合一个产品的开发.板载的 ...

  3. 基于STM32+FreeRtos+ESP8266+MQTT连接阿里云

    基于STM32+FreeRtos+DHT12+ESP8266+MQTT连接阿里云 1.概述 2.实现步骤 2.1.MQTT.fx模拟器与阿里云通信 2.2.STM32与阿里云通信 3. 搭建云平台 3 ...

  4. [arduino]ESP8266配置连接IoT阿里云平台(arduino D1 mini)

    [arduino]ESP8266配置连接IoT阿里云平台(arduino D1 mini) 前言 ESP8266配置(基础) ESP8266头文件配置 安装AliyunIoTSDK库 安装Arduin ...

  5. 【阿里云】物联网平台配置ESP8266真实设备AT串口连接,支持MQTT协议通信

    文章目录 1 阿里云物联网平台 2 MQTT.fx虚拟设备连接 2.1 配置设备连接(建立连接) 2.2 配置订阅和发布(数据通信) 3 ESP8266真实设备连接 3.1 配置设备连接(建立连接) ...

  6. STM32+ESP8266+MQTT微信小程序SoftAP一键配网接入腾讯物联网平台

    STM32+ESP8266+MQTT微信小程序SoftAP一键配网接入腾讯物联网平台   Wi-Fi 配网,指由外部向 Wi-Fi 设备提供 SSID 和密码(PSW),让 Wi-Fi 设备可以连接指 ...

  7. esp8266 mqtt 使用arduino开发教程

    esp8266的开发可以使用arduino的IDE进行开发,或者使用SDK开发 使用arduino的IDE开发是最简单的. 使用arduino的IDE开发,又可以分为直接在模块上开发或者通过ardui ...

  8. ESP8266接入阿里云(Arduino)

    下载Arduino 下载链接一:Software | Arduino 下载连接二:Arduino IDE下载(2月21日更新到1.8.19)-Arduino中文社区 - Powered by Disc ...

  9. 1、esp32(arduino)接入阿里云MQTT及数据处理

    esp32(arduino)接入阿里云MQTT服务器 1.遇到的问题和需求 2.解决方案 2.1.系统框图 2.2.待测产品 2.3.采集器 2.3.网关 2.4.服务器 2.5.数据库 2.6.客户 ...

最新文章

  1. C#中如何获取注册表信息
  2. caffe安装_keras/tensorflow1.x模型转换为caffe推理模型
  3. 第二篇:salt-api使用填坑指南
  4. linux下配置 ITK
  5. java SocketChannel and ServerSocketChannel
  6. 1、user权限表详解
  7. ImportError: cannot import name 'discovery'
  8. Simple-Faster-RCNN源码学习笔记
  9. ulp通信_Java Math类ulp()方法及示例
  10. CentOS 7.0 yum安装Apache、PHP和MySQL
  11. C++友元函数简单示例
  12. latex转为html效果好吗,latex2html
  13. Atitit.java 虚拟机的构成 与指令分类 与 指令集合 以及字节码查看工具javjap
  14. 八位颜色代码查询_RGB颜色代码全表
  15. element-ui使用踩坑记录 2022/8/24
  16. java swing界面设计_java swing界面设计
  17. PyCharm入门(七)PyCharm Evaluation:Your evaluation license expires in 3 days
  18. 你想要的虚幻UE游戏人物模型素材都在这里,细致又齐全
  19. series 合并pandas_在python中pandas的series合并方法
  20. 网络安全学习:系统基础命令操作

热门文章

  1. FitNesse工具
  2. fitnesse学习历程1
  3. C语言实验报告承诺书怎么写,北方民族大学c语言实验习题.pdf
  4. 【C# 】反射,调用.dll文件里面的方法
  5. ACC-5595反射内存交换机
  6. 用Python识别红绿灯
  7. 什么是人们常用的计算机设备之一,2012全国计算机一级考试一级B样题
  8. 判断一个数是否为回文数(三种方法,详细注解)
  9. Foundations of Machine Learning———PAC
  10. 分布式服务架构精讲pdf文档:原理+设计+实战,(收藏再看)