PubSubClient连接物联网平台

简介: Arduino中使用设备三元组连接阿里云物联网平台

之前的 例子 是使用username,password,clientid连接物联网平台的,但是阿里云物联网平台提供productKey,deviceName,deviceSerect来连接平台的,下面的例子是使用设备三元组计算出userName,passWord,clientId后再连接平台的,这样只要替换设备三元组信息就可以了。使用到的库是:PubSubClient,Crypto。

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <SHA256.h>
#define MQTT_PORT (1883)
#define SHA256HMAC_SIZE (32)
#define ALINK_CLIENTID_FORMAT "%s.%s|securemode=2,signmethod=hmacsha256,timestamp=%s|"
// Update these with values suitable for your network.
const char* ssid = "***";
const char* password = "***";
const char *mqtt_server = "***.iot-as-mqtt.cn-shanghai.aliyuncs.com";
const char *productKey = "***";
const char *deviceName = "***";
const char *deviceSecret = "***";
WiFiClient espClient;
PubSubClient client(espClient);
unsigned long lastMsg = 0;
int value = 0;
void setup_wifi() {
  delay(10);
  //We start by connecting to a WiFi network
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  randomSeed(micros());
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}
void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
  }
  Serial.println();
}
String hmac256(const String &signcontent, const String &ds)
{
    byte hashCode[SHA256HMAC_SIZE];
    SHA256 sha256;
    const char *key = ds.c_str();
    size_t keySize = ds.length();
    sha256.resetHMAC(key, keySize);
    sha256.update((const byte *)signcontent.c_str(), signcontent.length());
    sha256.finalizeHMAC(key, keySize, hashCode, sizeof(hashCode));
    String sign = "";
    for (byte i = 0; i < SHA256HMAC_SIZE; ++i)
    {
        sign += "0123456789ABCDEF"[hashCode[i] >> 4];
        sign += "0123456789ABCDEF"[hashCode[i] & 0xf];
    }
    return sign;
}
void reconnect() {
  //Loop until we're reconnected
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    // Create a random client ID
    long times = millis();
    String timestamp = String(times);
    char mqtt_clientId[256] = "";
    sprintf(mqtt_clientId, ALINK_CLIENTID_FORMAT, productKey, deviceName, timestamp.c_str());
    char mqtt_user[100] = "";
    sprintf(mqtt_user, "%s&%s", deviceName, productKey);
    String signcontent = "clientId";
    signcontent += productKey;
    signcontent += ".";
    signcontent += deviceName;
    signcontent += "deviceName";
    signcontent += deviceName;
    signcontent += "productKey";
    signcontent += productKey;
    signcontent += "timestamp";
    signcontent += timestamp;      
    String pwd  = hmac256(signcontent, deviceSecret); 
    char mqtt_pwd[100] = "";
    strcpy(mqtt_pwd, pwd.c_str());
    // Attempt to connect
    if (client.connect(mqtt_clientId, mqtt_user, mqtt_pwd)) {
      Serial.println("connected");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      delay(12000);
    }
  }
}
void setup() {
  //pinMode(BUILTIN_LED, OUTPUT);     // Initialize the BUILTIN_LED pin as an output
  Serial.begin(115200);
  setup_wifi();
  client.setServer(mqtt_server, MQTT_PORT);
  client.setCallback(callback);
}
void loop() {
  if (!client.connected()) {
    reconnect();
  }
  client.loop();
  unsigned long now = millis();
  if (now - lastMsg > 5000) {
    lastMsg = now;
    ++value;
    char topic[50] = "";
    char msg[100] = "";
    sprintf(topic, "/%s/%s/user/update", productKey, deviceName);
    sprintf(msg, "hello world #%ld", value);
    Serial.print("Publish message: ");
    Serial.println(msg);
    client.publish(topic, msg);
  }
}


相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
目录
相关文章
|
23天前
|
传感器 数据采集 物联网
元宇宙与物联网:连接虚拟与现实
【10月更文挑战第29天】元宇宙与物联网正逐步改变我们的生活和工作方式。元宇宙通过区块链、云计算等技术,构建了一个与现实世界平行的虚拟空间;物联网则通过智能感知和连接,将物体与互联网相连,提供精准数据和服务。两者融合,提升了虚拟空间的真实感和沉浸感,带来了更智能的服务,共同推动社会的数字化和智能化进程。
|
3天前
|
物联网 智能硬件
物联网技术:连接智能生活的桥梁
物联网技术:连接智能生活的桥梁
|
1月前
|
Kubernetes 网络协议 物联网
桥接物联网和云:在 Kubernetes 中增强与 Kong 的 TCPIngress 的连接
桥接物联网和云:在 Kubernetes 中增强与 Kong 的 TCPIngress 的连接
33 0
|
6月前
|
监控 安全 Java
Java与物联网:连接与控制设备
Java与物联网:连接与控制设备
524 0
|
3月前
|
Rust 安全 物联网
解锁物联网安全新纪元!Rust如何悄然革新系统级编程,让智能设备“零风险”连接未来?
【8月更文挑战第31天】随着物联网(IoT)技术的发展,设备安全与效率成为关键挑战。Rust语言凭借其内存安全、高性能和并发优势,逐渐成为物联网开发的新宠。本文通过智能门锁案例,展示Rust如何确保生物识别数据的安全传输,并高效处理多用户请求。Rust的应用不仅限于智能家居,还广泛用于工业自动化和智慧城市等领域,为物联网开发带来革命性变化。
93 1
|
3月前
|
物联网 C# 智能硬件
智能家居新篇章:WPF与物联网的智慧碰撞——通过MQTT协议连接与控制智能设备,打造现代科技生活的完美体验
【8月更文挑战第31天】物联网(IoT)技术的发展使智能家居设备成为现代家庭的一部分。通过物联网,家用电器和传感器可以互联互通,实现远程控制和状态监测等功能。本文将探讨如何在Windows Presentation Foundation(WPF)应用中集成物联网技术,通过具体示例代码展示其实现过程。文章首先介绍了MQTT协议及其在智能家居中的应用,并详细描述了使用Wi-Fi连接方式的原因。随后,通过安装Paho MQTT客户端库并创建MQTT客户端实例,演示了如何编写一个简单的WPF应用程序来控制智能灯泡。
116 0
|
3月前
|
监控 UED 开发者
从设计到监控:用Xamarin打造高可用性移动应用的实战策略与案例深度剖析
【8月更文挑战第31天】在数字化时代,移动应用成为生活工作的重要组成部分,其稳定性和可靠性至关重要。Xamarin作为跨平台开发框架,已广受认可,但如何确保应用高可用性是开发者面临的挑战。本文以电商应用“SmartShop”为例,从设计、异常处理、性能优化、多线程及测试监控五个方面探讨构建高可用性Xamarin应用的最佳实践。通过模块化设计、有效异常处理、性能优化、多线程技术和全面测试监控,确保应用稳定高效,提升用户体验。
38 0
|
3月前
|
物联网 监控 API
探索Xamarin在物联网浪潮中的宝石般闪耀:跨平台框架如何成为连接智能设备的桥梁并预示着技术的未来
【8月更文挑战第31天】在数字化转型中,物联网通过设备互联提升了生活与工作的智能化水平。Xamarin凭借其跨平台特性,在物联网开发中展现出巨大潜力,能够以一套代码同时支持多个操作系统,显著降低开发成本。通过高效的硬件交互与稳定的性能表现,Xamarin不仅优化了物联网应用的开发流程,还为未来的持续进化奠定了坚实基础。
57 0
|
4月前
|
存储 边缘计算 人工智能
云上物联网:连接万物,驱动智能未来
标准化与互操作性:随着物联网设备的不断增多和应用场景的日益广泛,标准化和互操作性将成为云上物联网发展的重要趋势。通过制定统一的标准和规范,实现不同品牌、不同型号物联网设备之间的互联互通和互操作,将大大提升云上物联网的灵活性和可扩展性。 边缘计算与云端协同:未来的云上物联网将更加注重
160 7
|
4月前
|
边缘计算 运维 安全
云上物联网边缘节点:重塑连接智能世界的桥梁
结语 云上物联网边缘节点作为物联网技术的重要组成部分,正以其独特的优势和潜力推动着物联网的快速发展。面对未来的机遇和挑战,我们需要不断创新和完善边缘节点的技术架构和应用模式,推动物联网技术的深度融合和广泛应用,为构建智慧社会贡献力量。
133 0

相关产品

  • 物联网平台