微信小程序+esp8266NodeMcu(cp2102)+onenet物联平台(二)

微信小程序+esp8266NodeMcu(cp2102)+onenet物联平台(一) 使用esp8266NodeMcu(cp2102)开发板,连接onenet物联平台,然后使用微信小程序控制esp8266开发板上的led灯,同时在开发板中模拟温度值,小程序通过onenet物联平台,读取温度值。 阅读详情

目录

一、搭建环境

1、esp8266NodeMcu(cp2102)驱动安装

 2、为esp8266NodeMcu搭建Arduino开发环境

3、安装PubSubClient库

二、编写代码


上一篇文章微信小程序+esp8266NodeMcu(cp2102)+onenet物联平台(一)介绍了onenet平台注册及设备连接,接下来介绍,如何使用Arduino IDE编写代码,控制esp8266,使用MQTT协议与onenet平台进行数据交互。关于MQTT协议,可参考太极创客的教程,非常详细。零基础入门学用物联网 – MQTT基础篇 – 目录 – 太极创客

一、搭建环境

1、esp8266NodeMcu(cp2102)驱动安装

下载地址:CP210x USB 至 UART 桥 VCP 驱动器 - 芯科科技

解压缩后安装驱动,根据自己电脑系统选择安装文件,我安装的是64位驱动。

​

安装后,使用usb数据线连接8266,然后打开设备管理器,查看端口(我的端口为com5)。

 ​

 2、为esp8266NodeMcu搭建Arduino开发环境

Arduino IDE下载地址:国外官网   或者 太极创客百度网盘 请输入提取码0ig4

打开“文件”-“首选项”

​

在Arduino IDE的“首选项”对话框中找到“附加开发板管理网址”,复制网址:

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

然后点击“好”

​

 打开Arduino IDE的“开发板管理器”

​

 ​

 安装时间比较长,也可以取消安装,然后去网盘下载: https://pan.baidu.com/s/1b0vs8SG5pCAji7MrsE3Aiw?pwd=ag4s 提取码: ag4s 

安装完毕后,在Arduino IDE的开发板菜单中选中“NodeMCU开发板”

​

 设置Arduino IDE的NodeMCU开发板端口​

3、安装PubSubClient库

PubSubClient库是一个MQTT库,进行主题的发布与订阅,

打开Arduino,按下图安装,或前往1-6 ESP8266发布MQTT消息 – 太极创客下载。 

​

二、编写代码

15年前学过c语言,不过,早都忘光了,调试过程中废了很大劲,勉强可以用。

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <Ticker.h>

// 设置wifi接入信息(请根据您的WiFi信息进行修改)
const char* ssid = "wifi名称";//wifi名称
const char* password = "wifi密码";//wifi密码
//MQTT连接设置
const char* mqttServer = "mqtts.heclouds.com";//onenet 的 域名
//const char *mqtt_server = "183.230.40.96"; //onenet 的 IP地址
const int mqtt_port = 1883;//onenet 的 端口
#define mqtt_devName "d1"//设备名
#define mqtt_pubid "558037"//产品ID
//鉴权信息,即onenet生成的设备连接token
#define mqtt_authorization "version=2018-10-31&res=products%2F558....."

WiFiClient wifiClient;//创建一个WIFI连接客户端
PubSubClient mqttClient(wifiClient);// 创建一个PubSub客户端, 传入创建的WIFI客户端
Ticker tim1; //定时器,用来循环上传数据

void setup() {
  // put your setup code here, to run once:
  pinMode(LED_BUILTIN, OUTPUT);     // 设置板上LED引脚为输出模式
  digitalWrite(LED_BUILTIN, HIGH);  // 启动后关闭板上LED
  Serial.begin(9600);

  //设置ESP8266工作模式为无线终端模式
  WiFi.mode(WIFI_STA);

  // 连接WiFi
  connectWifi();

  // 设置MQTT服务器和端口号
  mqttClient.setServer(mqttServer, mqtt_port);
  // 设置MQTT订阅回调函数
  mqttClient.setCallback(receiveCallback);
  // 连接MQTT服务器
  connectMQTTServer();
  //定时 每隔10秒发送一次温度数据点
  tim1.attach(10, sendDpData);
}

void loop() {
  // put your main code here, to run repeatedly:
  if (mqttClient.connected()) { // 如果开发板成功连接服务器
    // 保持心跳
    mqttClient.loop();
  } else {                  // 如果开发板未能成功连接服务器
    connectMQTTServer();    // 则尝试连接服务器
  }
}

连接wifi

// ESP8266连接wifi
void connectWifi() {
  WiFi.begin(ssid, password);
  //等待WiFi连接,成功连接后输出成功信息
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi Connected!");
  Serial.println("");
}

连接MQTT服务器

//连接MQTT
void connectMQTTServer() {
  if (mqttClient.connect(mqtt_devName, mqtt_pubid, mqtt_authorization)) {
    Serial.println("MQTT Server Connected.");
    Serial.println("Server Address: ");
    Serial.println(mqttServer);
    //订阅主题
    subscribeTopic();
  } else {
    Serial.print("MQTT Server Connect Failed. Client State:");
    Serial.println(mqttClient.state());
    delay(3000);
  }
}

发布数据,向数据流temperatrue发送数据

//发送数据 向主题发送数据流,即设备数据点上传
void sendDpData() {
  //  payload,需要发送的数据格式
  //  {
  //    "id": 123,
  //    "dp": {
  //        "temperatrue": [{
  //            "v": 30,
  //        }]
  //    }
  //  }
  //将payload转为字符串,传递的参数格式化为浮点数,保留2位小数
  char dataTemplate[] = "{\"id\":123,\"dp\":{\"temperatrue\":[{\"v\":%.2f,}]}}";
  //生成1-100的随机数,作为温度值
  srand((unsigned int)time(NULL));
  int temp = rand() % 100 + 1;
  //  Serial.println("随机数");
  //  Serial.println(temp);
  //发送信息缓冲区
  char msgJson[56];
  //将temp放入dataTemplate,复制给msgJson
  snprintf(msgJson, 56, dataTemplate, (float)temp);

  //设置发布主题
  String topicString = "$sys/558037/d1/dp/post/json";
  char publishTopic[topicString.length() + 1];
  strcpy(publishTopic, topicString.c_str());//将字符串转为字符数组

  // 实现ESP8266向主题发布信息
  if (mqttClient.publish(publishTopic, msgJson)) {
    Serial.println("发布数据点主题:"); Serial.println(publishTopic);
    Serial.println("发布信息:"); Serial.println(msgJson);
  } else {
    Serial.println("Message Publish Failed.");
  }
}

订阅用户发送命令主题

//订阅命令主题
void subscribeTopic() {
  // 建立主题
  String topicString = "$sys/558037/d1/cmd/request/+";
  char subTopic[topicString.length() + 1];
  strcpy(subTopic, topicString.c_str());

  // 通过串口监视器输出是否成功订阅主题以及订阅的主题名称
  if (mqttClient.subscribe(subTopic)) {
    Serial.println("订阅的主题为:");
    Serial.println(subTopic);
  } else {
    Serial.print("Subscribe Fail...");
  }
}

MQTT订阅回调函数,根据用户发送的命令,执行开关灯,及调节灯的亮度

/*
   订阅回调函数,参数固定
   当用户端发送cmd命令后,esp8266进行的回调处理
*/
void receiveCallback(char* topic, byte* payload, unsigned int length) {
  Serial.print("收到的cmd主题 [");
  Serial.print(topic);
  Serial.println("] ");
  //获取主题topic//$sys/558037/d1/cmd/request/b790bdca-5528-4469-8639-7439046bf39a 中的 cmdid 90977789-5c61-4bb9-9387-ba9a676ff9f5
  char cmdStr[strlen(topic) - 27];//声明cmdStr,保存cmdid
  strcpy(cmdStr, topic + 27);//从topic字符串第27个位置开始向后取值

  //输出payload内容
  Serial.print("收到的数据:");
  char payload_char[length + 1];
  memset(payload_char, 0, sizeof(payload_char));
  for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
    payload_char[i] = (char)payload[i];
  }
  Serial.println();
  Serial.println("--------------");

  /*
    判断收到的命令类型
    led 开关灯,led:0关灯,led:1开灯
    bright 调节灯亮度,bright:数字,数字为PWD调节灯的亮度,范围0-1023
  */
  char *dataPtr = NULL;//传递的数据
  char numBuf[10];
  int num = 0;
  dataPtr = strchr((char *)payload_char, ':');//查找冒号
  if (dataPtr != NULL)         //如果找到了
  {
    dataPtr++;//后移一位,指向数据
    while (*dataPtr >= '0' && *dataPtr <= '9')   //循环取出数据
    {
      numBuf[num++] = *dataPtr++;
    }
    //numBuf[num] = 0;
    num = atoi((const char *)numBuf);       //转为数值
    if (strstr((char *)payload_char, "led"))   //搜索"led"
    {
      Serial.println("控制类型led");
      Serial.print("数值:");
      Serial.println(num);
      if (num == 1)               //控制数据如果为1,代表开
      {
        digitalWrite(BUILTIN_LED, LOW);  // 则点亮LED。
        Serial.println("LED ON");
      }
      else if (num == 0)            //控制数据如果为0,代表关
      {
        digitalWrite(BUILTIN_LED, HIGH); // 否则熄灭LED。
        Serial.println("LED OFF");
      }
    }
    if (strstr((char *)payload_char, "bright"))   //搜索"bright"
    {
      Serial.println("控制类型bright");
      Serial.print("数值:");
      Serial.println(num);
      analogWrite(4, num); //GPIO4接Led灯,pwm输出
    }
  }

  //向服务器返回信息,即已收到命令
  sendCmdResponse(cmdStr);

}

向服务器发送确认信息,通知服务器已收到cmd命令信息。

//接受到cmd命令后,返回的数据信息
void sendCmdResponse(char* cmdStr) {
  //返回OK
  char responseData[] = "ok";
  //设置主题的模板字符串
  char topicString[] = "$sys/558037/d1/cmd/response/%s";
  //计算发布主题publicTopic需要的字符空间,topicString长度 + cmdStr长度
  int slength = strlen(topicString) + strlen(cmdStr);
  //定义发布主题
  char publicTopic[slength];
  //将topicString和cmdStr进行拼接
  snprintf(publicTopic, slength, topicString, cmdStr);

  // 实现ESP8266向主题发布信息
  if (mqttClient.publish(publicTopic, responseData)) {
    Serial.println("发布命令回复主题:"); Serial.println(publicTopic);
    Serial.println("主题信息:"); Serial.println(responseData);
  } else {
    Serial.println("Message Publish Failed.");
  }
}

NodeMCU ESP8266与OneNet MQTT协议实战:从温湿度上传到智能灯控 本文详细介绍了如何使用NodeMCU ESP8266开发板与OneNet平台通过MQTT协议实现温湿度上传和智能灯控的物联网项目。从硬件连接到OneNet平台配置,再到代码实现和常见问题排查,提供了全面的实战指南,适合物联网开发初学者快速上手。 阅读详情

相关推荐

ESP8266物联网开发全解析:从硬件选型到网络编程实战

微控制器与物联网开发是嵌入式领域的核心方向,其原理在于通过集成处理器、存储和通信模块,实现设备的智能化与网络化。这项技术的价值在于大幅降低了硬件开发门槛,推动了智能家居、工业监控等场景的快速普及。在众多解决方案中,基于Wi-Fi的片上系统因其高集成度和丰富生态备受青睐。以ESP8266为例,这款芯片不仅具备完整的微控制器功能,还内置了Wi-Fi模块,支持Arduino与MicroPython等主流开发框架。开发者可以通过它轻松实现STA/AP网络模式、HTTP/MQTT通信以及OTA升级,并结合文件系统进行

weixin_33724059的博客 423

win10安装CP2102(STM32串口通信)驱动

win10安装CP2102(STM32串口通信)驱动

qq_42739167的博客 3万+

window系统使用ESP8266开发板(CP2102)

打开Arduino IDE 并选择连接开发板。虚拟机中选择连接的开发板硬件。

724

WIN10 64位 CP2102 驱动安装不成功

如果没有发现没有Silicon Laboratories设备,就需要先安装对应的驱动程序CP210x_VCP_Windows.zip。右键更新驱动程序后选择浏览我的电脑以查找驱动程序。选择让我从计算机上的可用驱动程序列表中选取。1、驱动有显示,有黄色感叹号。找到端口(COM和LPT)3、更新驱动程序不成功。2、右键更新驱动程序。

天和地丰 4473

Windows 10系统下CP2102驱动应用详解

Windows 10作为一个现代化的操作系统,其对硬件的支持能力被广泛认可。然而,即使是如此强大的系统,也需要为其硬件设备安装专门的驱动程序以实现最佳性能。CP2102驱动程序对于Windows 10用户来说,是一个不可或缺的组件。它允许Windows系统能够识别和正确地与CP2102芯片进行交互。没有正确的驱动支持,CP2102芯片无法充分发挥其USB转UART桥接功能,也就无法实现与微控制器、嵌入式系统、甚至物联网设备之间的通信。

weixin_36204513的博客 2740

CP2102芯片专用USB转串口驱动合集(Win7/8/10/11全兼容,32位+64位双安装包)

专为Silicon Labs CP2102 USB转UART桥接芯片准备的即装即用驱动包,覆盖Windows 7到Windows 11所有主流版本,内置x86(32位)和x64(64位)两套独立安装程序:CP210xVCPInstaller_x86.exe和CP210xVCPInstaller_x64.exe。安装时自动识别系统架构,无需手动判断;支持设备管理器中手动更新COM端口驱动,也支持静默部署(通过dpinst.xml配置实现无人值守安装)。核心驱动文件包括silabser.sys(标准串口驱动)、

omega的博客 1284

CP2102串口芯片驱动程序官网(Windows7/8/10 等) USB转TTL

CP2102是一款USB转TTL电平的USB转串口芯片,百度网站上的驱动不是病毒就是安装后无效,经同事推荐去官网下载后成功连接。 官网地址:https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers 打开上述链接,按照自己系统下载驱动,并解压和安装。 比如:win7 64位...

WarGames_dc的博客 4万+

CP2102驱动适配与安装详解

本文深入分析Silicon Labs CP2102 USB转UART芯片在Windows系统下的驱动安装机制,重点解析x86与x64架构驱动差异、数字签名要求及Secure Boot兼容性问题,提供手动与静默安装方案,并探讨硬件设计最佳实践与跨平台支持特性。

mac99的博客 1102

CP2102 USB to UART Bridge Controller 驱动安装(windows or Ubuntu)

CP2102是一款USB转TTL电平的USB转串口芯片,使用时发现诸多小网站上的驱动不是病毒就是安装后无效,经同事推荐去官网下载后成功连接。 官网地址:https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers 打开上述链接,按照自己系统下载驱动,并解压和安装。gen根据电脑选择64 或者32位。 然后就可以在电脑看到端口了。哇,搞了一上午st_link,其好像不能作为UART转US

工大机器人工作室 18万+

CP2102 usb转串口驱动

Windows版CP2102 usb转串口驱动

从零搭建SPI通信系统:AXI Quad SPI IP核在Xilinx平台上的完整配置流程

本文详细介绍了在Xilinx平台上使用AXI Quad SPI IP核从零搭建SPI通信系统的完整配置流程。涵盖IP核架构解析、Vivado环境配置、寄存器编程实战及性能优化策略,帮助开发者快速实现高速稳定的SPI通信,特别适用于嵌入式系统开发中的外围设备连接需求。

hh234的博客 1052

CP2102N USB to UART Bridge Controller 驱动程序无法使用

vivado开发出现的问题。

weixin_51116586的博客 9046

python k线顶分型_【缠论】分型、笔的定义及其程序化

K线包含关系处理和分型的定义如果一个K线的高低点全在另一K线的范围里,称之为包含关系。针对这种K线,需要进行一些处理,去除包含关系,处理方法:向上时,把两K线的高点当高点,而两K线低点中的较高者当成低点;反之,当向下时,把两K线的低点当低点,而两K线高点中的较低者当成高点,这样就把两K线合并成一新的K线。经过这样的处理,所有K线图都可以处理成没有包含关系的图形。两K线的包含关系,可以分成四种:1)...

weixin_39717152的博客 2823

STM32和微信小程序 连接Onenet上传数据、下发指令

首先在开始前需要进行Onenet平台和微信小程序的注册,Onenet的设备注册想必大家都会了,就不再赘述了,简单说一下微信小程序的注册;点击前往注册,然后填写注册信息完成注册(一个邮箱只能申请一个小程序),这样你就注册成功了,然后登录后在设置里找到自己的AppID(小程序ID)再打开miniprogram->page->index->index.js【index.js不是index.json】先打开project.config.json翻到第四十行修改appid,这里就用到之前你注册的微信小程序ID了。

qq_64332964的博客 5173

FoundationPose复现及Realsense应用

FoundationPose是一个统一的基础模型,用于6D对象姿态估计和跟踪,支持基于模型和无模型的设置。在测试时可以立即应用于未见过的新对象,无需微调,只要给出其CAD模型,或者捕获少量RGBD参考图像。得益于统一框架,下游姿态估计模块在两种3D模型设置中都是相同的,当没有CAD模型时,使用神经隐式表示进行高效的新视角合成。通过大规模合成训练,辅以大型语言模型(LLM)、一种基于transformer的新架构和对比学习公式,实现了强大的泛化能力。

m0_56661101的博客 1万+

揭秘Outlook/QQ邮箱伪造:如何利用Unicode编码绕过SPF检测

本文深入剖析了利用Unicode编码进行邮件显示名伪造的攻击手法,揭示了攻击者如何通过插入零宽字符等特殊编码绕过SPF检测,使邮件在Outlook、QQ邮箱等客户端中看似来自可信发件人。文章通过Python代码示例演示了伪造过程,并提供了从用户自查到管理员部署DMARC策略的多层次防御建议。

weixin_29063035的博客 332

CP2102驱动安装和COM设置

用截图的方式展示了CP2102的驱动安装方法和同一电脑连接两个CP2102时COM口冲突问题。

qq_45887382的博客 2320

必看!wechat-article-exporter:轻松批量下载公众号文章

微信搜索“”关注公众号。在信息爆炸的时代,我们每天都会接触到大量优秀的微信公众号文章。有时候,我们想要将这些精彩的内容保存下来,以便日后回顾或者分享给更多的人。然而,微信公众号并没有提供直接的批量下载功能,这给我们带来了不少困扰。今天,我要给大家分享一款非常实用的软件——wechat-article-exporter,它能够帮助我们轻松地批量下载微信公众号文章,让你不再为文章的保存而烦恼。

王乐平 技术博客 4351

CP2102 USB to UART Bridge Controller 串口驱动安装(windows or Ubuntu)

tool

嵌入式与人工智能 6万+

Ollama本地大模型部署指南:从核心原理到实战避坑

大语言模型(LLM)作为人工智能领域的核心技术,通过海量数据训练获得强大的语言理解和生成能力。其工作原理基于Transformer架构,通过自注意力机制处理序列数据,在文本生成、代码编写和对话系统等场景展现出巨大价值。随着开源模型的普及,本地部署成为关注焦点,它解决了数据隐私和定制化需求,但面临环境配置和资源管理的挑战。Ollama作为开源工具,通过封装模型格式和统一API,简化了本地部署流程,支持GPU加速和性能调优,让开发者能够快速集成到IDE和自动化脚本中,实现高效的本地AI应用部署。

weixin_30915951的博客 451

贝加莱Automation Studio 4.10安装保姆级教程:从官网下载到解决.Net 3.5报错

本文提供贝加莱Automation Studio 4.10的详细安装教程,涵盖从官网下载到解决.Net 3.5报错的全过程。特别针对工业自动化开发环境中常见的.Net Framework 3.5安装问题,提供多种经过验证的解决方案,包括控制面板安装、DISM命令离线安装和手动下载安装包等方法,帮助工程师顺利完成PLC开发环境的搭建。

weixin_30955617的博客 710

【亲测免费】 CP2102驱动64位win10官网驱动

CP2102驱动64位win10官网驱动 【下载地址】CP2102驱动64位win10官网驱动 该开源项目提供了适用于64位Windows 10系统的CP2102官方驱动程序,确保设备连接的稳定性和安全性。无论是开发人员还是普通用户,都可以通过安装此驱动,轻松将CP2102芯片的设备与电脑连接,确保设备正常运行。该驱动来...

gitblog_06754的博客 814

YOLO11改进|注意力机制篇|引入ELA注意力机制

YOLO11添加ELA注意力机制

A1983Z的博客 3647

【免费下载】 CP2102驱动程序下载介绍

CP2102驱动程序下载介绍 【下载地址】CP2102驱动程序下载介绍 CP2102驱动程序是一款专为WIN7和WIN10系统(32位及64位)设计的USB-UART桥接器驱动,能够高效实现RS232与USB接口的转换。经过严格测试,该驱动在各类笔记本和台式机上表现稳定,兼容性极佳。无论是64位还是32位操作系统,用户都...

gitblog_06737的博客 882

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

ESP32准备:CP2102 USB转串口驱动下载

官网下载。

fyhh520的博客 5352

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

上一篇: 微信小程序+esp8266NodeMcu(cp2102)+onenet物联平台(一)
下一篇: pycharm,项目环境中安装轮子whl库
少杰()
博客等级 码龄4年 18粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少杰()

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值