Esp32_Arduino接入腾讯云笔记

这篇具有很好参考价值的文章主要介绍了Esp32_Arduino接入腾讯云笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ESP32是一款由乐鑫科技(Espressif Systems)推出的双核、低功耗、集成Wi-Fi和蓝牙的单芯片微控制器。它采用了Tensilica Xtensa LX6高性能处理器,具有大量的GPIO引脚、模数转换器、SPI、I2S、UART、PWM、I2C和SD卡接口等功能,可以满足各种物联网(IoT)应用的需求。由于其高度集成和低功耗特性,ESP32广泛应用于智能家居、智能城市、工业自动化、智能健康、车联网等领域。

1.1 准备

软件:Arduino IDE
硬件:esp32-dev-module

1.2 esp32_Arduino的MQTT库安装

esp32通过MQTT协议连接到物联网平台,我们需要一个mqtt client的库,帮助我们发布订阅相关的topic。我们还需要一个JSON库,帮我们解析JSON,用来序列化和反序列化物模型的JSON数据。
在工具>管理库中,查找PubSubclient、ArduinoJSON和EspMQTTclient,并安装。

1.3 MQTT连接腾讯云的相关配置

这里使用腾讯云平台,创建物联网公共实例。
(1)填写域名和端口
${productid}.iotcloud.tencentdevices.com:1883
(2)生成username和password
要注意的是username和password是在连接到云端mqtt broker的时候需要填入的,可以通过这个在线工具生成。Hmac签名算法选择【HMAC-SHA1】。
(3)填写订阅和发布的消息,可从云平台中获得。
发送的消息指令,具体数据格式可通过云端的调试功能发送一条消息进行测试。
Esp32_Arduino接入腾讯云笔记,嵌入式,腾讯云,笔记

1.4 编写代码

#include <Arduino.h>
#include <WiFi.h>
#include "PubSubClient.h"
#include <ArduinoJson.h>
DynamicJsonDocument doc(1024);

const char *ssid = "climbot";
const char *pwd  = "climbot903B";
const char *mqtt_server = "E3TGIRQYNA.iotcloud.tencentdevices.com";
const char *mqtt_username = "E3TGIRQYNA01;12010126;CT9W4;1690882370";
const char *mqtt_userpwd  = "72b711c5d7f7e1c76cfca1a785fbddfd3f744163;hmacsha1";
const char *mqtt_clientid = "E3TGIRQYNA01";
const char *mqtt_pub_topic = "$thing/up/property/E3TGIRQYNA/01";
const char *mqtt_sub_topic = "$thing/down/property/E3TGIRQYNA/01";

bool power_switch;
float longtitude; 
float latitude;   
int power_percent = 0;

#define REPORT_DATA_TEMPLATE "{\"method\":\"report\",\"clientToken\":\"00000001\",\"params\":{\"power_switch\":%d,\"GPS_Info\":{\"longtitude\":%f,\"latitude\":%f},\"_mesh_generic_power_percent\":%d}}"

WiFiClient espClient;
PubSubClient mqttclient(espClient);
long lastMsg = 0;
char report_buf[1024];

void callback(char* topic, byte* payload, unsigned int length)
{
  Serial.print("--->Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  Serial.println();
  Serial.print("payload [");
  for (int i=0;i<length;i++) {
    Serial.print((char)payload[i]);
  }
  Serial.println();

//处理上位机的控制指令
  DeserializationError error = deserializeJson(doc, payload);
    // Test if parsing succeeds.
      if (error) {
        Serial.print("deserializeJson() failed: ");
        Serial.println(error.f_str());
        return;
      }else{
        if (doc["clientToken"]!="00000001") {
          if (doc["params"]["power_switch"] == 1) {
            Serial.print("Power On ");
            power_switch=1;
          } else {
            Serial.print("Power Off ");
            power_switch=0;
          }
        }
      }

}

void setup_wifi()
{
    Serial.printf("Connect to %s ", ssid);
    WiFi.begin(ssid, pwd);
    while (WiFi.status() != WL_CONNECTED) {
        Serial.printf(".");
        delay(500);
    }
    Serial.println("Connected!");
    Serial.print("IP address: ");
    Serial.println(WiFi.localIP());
}

void setup() {
    Serial.begin(115200);

    setup_wifi();

    mqttclient.setServer(mqtt_server, 1883);// connect mqtt server
    mqttclient.setCallback(callback);
    mqttclient.setKeepAlive(65535);
    while (!mqttclient.connect(mqtt_clientid, mqtt_username, mqtt_userpwd)) {
        Serial.println("mqtt connect fail, reconnect");
        delay(2000);
    }
    Serial.println("mqtt connected!");
    
    // sub topic
    boolean ret = mqttclient.subscribe(mqtt_sub_topic);
    if (ret != true) {
        Serial.printf("mqtt subscribe topic [%s] fail\n", mqtt_sub_topic);
    }
    Serial.printf("mqtt subscribe topic [%s] ok\n", mqtt_sub_topic);
}

void loop() {
    // client loop
    mqttclient.loop();

    // pub topic
    long now = millis();
    if (now - lastMsg > 10000) {
        lastMsg = now;
        memset(report_buf, 0, 1024);
        sprintf(report_buf, REPORT_DATA_TEMPLATE, power_switch,longtitude,latitude,power_percent);
        Serial.println(report_buf);
        if (++power_percent > 100) {//模拟传感器数据
            power_percent = 0;
        }
         if (++longtitude > 100) {
            longtitude = 0;
        }
          if (++latitude > 100) {
            latitude = 0;
        }
        
        if (mqttclient.publish(mqtt_pub_topic, report_buf)) {
            Serial.printf("mqtt publish topic [%s] ok\n", mqtt_pub_topic);
        } else {
            Serial.printf("mqtt publish topic [%s] fail\n", mqtt_pub_topic);
        }
    }
}

1.5 烧录和测试

点击下载按钮,待下载完成后,打开串口监视器可看到打印的数据。打开腾讯云平台可查看设备在线状态。
Esp32_Arduino接入腾讯云笔记,嵌入式,腾讯云,笔记文章来源地址https://www.toymoban.com/news/detail-618287.html

到了这里,关于Esp32_Arduino接入腾讯云笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【嵌入式学习笔记】嵌入式基础9——STM32启动过程

    程序段交叉引用关系(Section Cross References):描述各文件之间函数调用关系 删除映像未使用的程序段(Removing Unused input sections from the image):描述工程中未用到被删除的冗余程序段(函数/数据) 映像符号表(Image Symbol Table):描述各符号(程序段/数据)在存储器中的地址、类

    2024年02月15日
    浏览(75)
  • 物联网项目分享 基于ESP32的在线墨水屏桌面摆件 -物联网 单片机 嵌入式

    hr style=\\\" border:solid; width:100px; height:1px;\\\" color=#000000 size=1\\\" 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最

    2024年02月21日
    浏览(50)
  • 通信工程毕设 基于ESP32的在线墨水屏桌面摆件 -物联网 单片机 嵌入式

    hr style=\\\" border:solid; width:100px; height:1px;\\\" color=#000000 size=1\\\" 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最

    2024年02月19日
    浏览(45)
  • 嵌入式学习笔记——STM32的时钟树

    在之前的所有代码编程的过程中,似乎每次都绕不开一个叫做时钟使能的东西,当时我们是在数据手册上直接看其挂接在那条时钟线上的,那么STM32内部的时钟到底是怎么一个构型呢,本文来对此做一个介绍。 老规矩,一个新的名词出现,首先需要搞清楚它是个啥,下图中对

    2024年02月02日
    浏览(49)
  • 嵌入式学习笔记——STM32硬件基础知识

    上一篇中我们重点是讲了一下怎么搭建开发环境以及怎么下载烧录的过程,这都是解决的电脑端的开发环境问题,还没有到实际的开发板上,我们的单片机是都是焊接在开发板上的,PCB上有着它所需的工作电路。并不是直接给供电电压就可以让其工作的,本文主要是简介一下

    2024年01月22日
    浏览(56)
  • 嵌入式学习笔记——STM32的USART通信概述

    上两篇文章中,已经实现了GPIO的通用输出以及通用输出模式,从本文开始,笔者将开始有关GPIO的复用功能的介绍,首先是最常用复用功能——串口,本文主要是介绍一些关于通信以及串口的基本概念。 通信协议:通信双方进行信息交换(接收或发送)要满足的规则,而这个规

    2023年04月08日
    浏览(49)
  • 嵌入式系统开发笔记104:在STM32CubeIDE中导入工程

      本文讲述如何在STM32CubeIDE中导入现有工程。

    2024年02月16日
    浏览(40)
  • 嵌入式学习笔记(32)S5PV210的向量中断控制器

    6.6.1异常处理的2个阶段 可以将异常处理分为2个阶段来理解。第一个阶段是异常向量表跳转;第二个阶段是进入了真正的异常处理程序irq_handler之后的部分。 6.6.2回顾:中断处理的第一个阶段(异常向量表跳转阶段)处理 (1)第一个阶段之所以能够进行,主要依赖于CPU设计时

    2024年02月07日
    浏览(54)
  • 嵌入式学习笔记——STM32的USART收发字符串及串口中断

    上一篇中,介绍了串口收发相关的寄存器,通过代码实现了一个字节的收发,本文接着上面的内容,通过功能函数实现字符串的收发,然后引入中断解决收发过程中while()死等的问题。 根据昨天的字符发送函数,只需要稍作修改即可实现发送函数了,一个字符串的结尾会有一

    2024年02月03日
    浏览(67)
  • 嵌入式学习笔记——STM32的USART相关寄存器介绍及其配置

    上一篇中,对串口做了个概述,主要是介绍了串口通信的特征,异步串行全双工通信,然后就是结合串口的框图梳理了一下STM32中USART的配置流程以及发送接收数据的流程,本文将接着上篇的内容,对串口的寄存器做个介绍,然后实现一个简单的收发实验。 根据之前GPIO的经验

    2024年02月05日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包