查询OneNet平台多协议接入文档,地址链接如下,这里直接查看MQTT的API使用方法:
https://open.iot.10086.cn/doc/v5/develop/detail/582

新版MQTT好像无法利用微信小程序调用API,旧版的可以,即在多协议接入中配置,配置方法和新版的配置方法一致,找到API地址和API密钥。

我用ApiPost来进行测试是否能获取数据,网页地址如下:
https://console.apipost.cn/apis/project
ApiPost设置如下,采用GET方式,填写好API地址和API密钥,然后发送,可以看到正确返回数据,数据格式如下:

微信小程序注册网上有很多教程,微信小程序项目中的每个文件的作用:

index.js 页面逻辑代码用js实现
index.json json数据
index.wxml 页面标记语言与HTML相似
index.wxss 页面样式

index.js代码如下,主要修改API地址和API密钥。

Page({data: {temperature:"0",humidity: "0",},//周期函数onLoad: function () {setInterval(function () {this.init() }.bind(this), 1000)},init: function () {var that = thiswx.request({url: "https://api.heclouds.com/devices/********/datapoints",   //将请求行中的数字换成自己的设备IDheader: {"api-key": "***************"                     //换成自己的api-key},data: {limit: 1},method: "GET",success: function (e) {console.log(e.data.data)that.setData({humidity: e.data.data.datastreams[0].datapoints[0].value,temperature : e.data.data.datastreams[1].datapoints[0].value,})}});}
})

温湿度数据主要是根据上面ApiPost解析出来数据格式定位,代码如下:

humidity: e.data.data.datastreams[0].datapoints[0].value,
temperature : e.data.data.datastreams[1].datapoints[0].value

页面配置可以用可视化选项进行配置(像拖拽,添加文本等),所有配置完成后,可以看到小程序上可以显示自己的温湿度数据。

演示视频如下:

将完成的小程序进行上传发布,选择上传选项,如下图所示:

填写版本号:

上传成功如下:

登录微信公众平台,登录小程序平台,找到版本管理选项,可以看到刚才上传的小程序,如下图所示。

提交审核,下一步。

继续提交。

填写相关信息。

确定提交。

等待审核。

审核通过,发布即可。

发布后,手机上会自动出现发布的小程序,可以打开查看。

ESP32 MQTT旧版本程序与新版本有区别但不大,旧版本鉴权信息可以自己设定。

#include <Arduino.h>
#include "WiFi.h"
#include "PubSubClient.h"
#include "Ticker.h"
#include <Wire.h>
const char *ssid = "Redmi K40";               //wifi名
const char *password = "********";       //wifi密码
const char *mqtt_server = "183.230.40.39"; //onenet 的 IP地址
const int led =2; //灯的接口
#define mqtt_devid "*****" //设备ID
#define mqtt_pubid "*****"        //产品ID
//鉴权信息
#define mqtt_password "*****" //鉴权信息(自己设定的不需要token)
#define Addr_SHT30 0x44     // SHT30 IIC 7位地址为0x44
#define SDA_PIN 21          //引脚接法在这里
#define SCL_PIN 22
WiFiClient espClient;           //创建一个WIFI连接客户端
PubSubClient client(espClient); // 创建一个PubSub客户端, 传入创建的WIFI客户端char msg_buf[200];                                //发送信息缓冲区
char dataTemplate[] = "{\"temp\":%.2f,\"hum\":%.2f}"; //信息模板
char msgJson[75];                                 //要发送的json格式的数据
unsigned short json_len = 0;                      //json长度
Ticker tim1;                                      //定时器,用来循环上传数据//连接WIFI相关函数
void setupWifi()
{delay(10);Serial.println("连接WIFI");WiFi.begin(ssid, password);while (!WiFi.isConnected()){Serial.print(".");delay(500);}Serial.println("OK");Serial.println("Wifi连接成功");
}//收到主题下发的回调, 注意这个回调要实现三个形参 1:topic 主题, 2: payload: 传递过来的信息 3: length: 长度
void callback(char *topic, byte *payload, unsigned int length)
{Serial.println("message rev:");Serial.println(topic);for (size_t i = 0; i < length; i++){Serial.print((char)payload[i]);}Serial.println();if ((char)payload[0] == '0') {digitalWrite(led, LOW);   // } if ((char)payload[0] == '1') {digitalWrite(led, HIGH);  // }else{}
}//向主题发送模拟的温湿度数据
void sendTempAndHumi()
{if (client.connected()){unsigned int data[6]; //存储获取到的六个数据Wire.beginTransmission(Addr_SHT30);//开始IIC //写地址Wire.write(0x2C);    //发送测量命令 0x2C06,但是因为IIC一次只能发一个8位数据,所以得发两次Wire.write(0x06);    //停止IICWire.endTransmission();   //等待500ms是等待SHT30器件测量数据,实际上这个时间可以很短delay(500);Wire.requestFrom(Addr_SHT30, 6);   //请求获取6字节的数据,然后会存到8266的内存里if (Wire.available() == 6)  //读取6字节的数据,这六个字节分别为:温度8位高数据,温度8位低数据,温度8位CRC校验数据,湿度8位高数据,湿度8位低数据,湿度8位CRC校验数据{data[0] = Wire.read();data[1] = Wire.read();data[2] = Wire.read();data[3] = Wire.read();data[4] = Wire.read();data[5] = Wire.read();}float temp = ((((data[0] * 256.0) + data[1]) * 175) / 65535.0) - 45;  //然后计算得到的数据,要转化为摄氏度、相对湿度float hum = ((((data[3] * 256.0) + data[4]) * 100) / 65535.0);snprintf(msgJson, 40, dataTemplate, temp, hum); //将模拟温湿度数据套入dataTemplate模板中, 生成的字符串传给msgJsonjson_len = strlen(msgJson);                   //msgJson的长度msg_buf[0] = char(0x03);                       //要发送的数据必须按照ONENET的要求发送, 根据要求,数据第一位是3msg_buf[1] = char(json_len >> 8);              //数据第二位是要发送的数据长度的高八位msg_buf[2] = char(json_len & 0xff);            //数据第三位是要发送数据的长度的低八位memcpy(msg_buf + 3, msgJson, strlen(msgJson)); //从msg_buf的第四位开始,放入要传的数据msgJsonmsg_buf[3 + strlen(msgJson)] = 0;              //添加一个0作为最后一位, 这样要发送的msg_buf准备好了Serial.print("public message:");Serial.println(msgJson);client.publish("$dp", (uint8_t *)msg_buf, 3 + strlen(msgJson)); //发送数据到主题$dp}
}//重连函数, 如果客户端断线,可以通过此函数重连
void clientReconnect()
{while (!client.connected()) //再重连客户端{Serial.println("reconnect MQTT...");if (client.connect(mqtt_devid, mqtt_pubid, mqtt_password)){Serial.println("connected");}else{Serial.println("failed");Serial.println(client.state());Serial.println("try again in 5 sec");delay(5000);}}
}void setup()
{pinMode(led,OUTPUT);//输出 Wire.begin(SDA_PIN, SCL_PIN);                          //初始化IIC(作为主设备)Serial.begin(115200);                                  //初始化串口delay(3000);                                           //这个延时是为了让我打开串口助手setupWifi();                                           //调用函数连接WIFIclient.setServer(mqtt_server, 6002);                   //设置客户端连接的服务器,连接Onenet服务器, 使用6002端口client.connect(mqtt_devid, mqtt_pubid, mqtt_password); //客户端连接到指定的产品的指定设备.同时输入鉴权信息client.setCallback(callback);                          //设置好客户端收到信息是的回调tim1.attach(1, sendTempAndHumi);                      //定时每1秒调用一次发送数据函数sendTempAndHumi
}void loop()
{if (!WiFi.isConnected()) //先看WIFI是否还在连接{setupWifi();}if (!client.connected()) //如果客户端没连接ONENET, 重新连接{clientReconnect();}client.loop(); //客户端循环检测
}

ESP32-微信小程序获取OneNET温湿度数据相关推荐

  1. 微信小程序获取Onenet温湿度数据并控制灯亮灭

    ​ 其实之前就写过类似的文章,但是看过我博客的朋友就知道,我是先写微信小程序获取onenet,然后再写esp32上云到onenet.一篇是ESP32-C3通过MQTT协议把温湿度上传到OneNet平台 ...

  2. 微信小程序获取OneNet数据显示温湿度

    微信小程序获取OneNet数据显示温湿度 一.OneNet平台 ​ 1.我这里的设备是通过MQTT协议连接到OneNet平台的 ​ 2.微信小程序获取OneNet数据需要得到产品的api-key.设备 ...

  3. 微信小程序获取Onenet图片

    微信小程序获取Onenet平台的图片 目录 微信小程序获取Onenet平台的图片 1.Onenet平台 2.微信小程序 1.Onenet平台 我做的项目是通过STM32F4开发板,结合ov2640摄像 ...

  4. 微信小程序获取数据库的数据返回空数组

    在接触微信小程序的时候,请求数据库时返回了空数组,只要打开云开发控制台,在数据库里点击的你的集合,设置一下你的权限管理为-所有用户可读,仅创建者可读写,就行了

  5. 微信小程序获取云服务器数据,微信小程序云开发服务端数据库API 获取集合数据...

    Collection.get / Query.get 获取集合数据,或获取根据查询条件筛选后的集合数据. 如果没有指定 limit,则默认最多取 20 条记录. 如果没有指定 skip,则默认从第 0 ...

  6. 微信小程序如何从数组里取值_微信小程序获取各种数据值跟设置数据值

    微信小程序获取各种数据值跟设置数据值. 修改设置data数组中的某个值://小程序接收后台数据若为数组时,下标最好为默认索引数组,从0开始排序 var articleId ='1'//对应数组中的索引 ...

  7. 小程序js中data获取服务器数据,微信小程序 获取javascript 里的数据

    微信小程序 获取javascript 里的数据 wxml如何获取js里的数据 例: wxml里: {{txt}} 通过上面的{{txt}}可以对应获取js里data下定义的txt的值 js里: dat ...

  8. 微信小程序获取openid和session_key并且把openid存入数据库

    微信小程序开发交流qq群   581478349 微信小程序获取openid和session_key并且把openid存入数据库.已经调用openid的demo 前后端代码都有,后端php实现 在其它 ...

  9. .Net之微信小程序获取用户UnionID

    前言: 在实际项目开发中我们经常会遇到账号统一的问题,如何在不同端或者是不同的登录方式下保证同一个会员或者用户账号唯一(便于用户信息的管理).这段时间就有一个这样的需求,之前有个客户做了一个微信小程序 ...

最新文章

  1. 顶尖程序员不同于常人的 5 个区别
  2. 2019华为全联接大会(汇总)
  3. 英语口语(5月17)
  4. Android应用实现文件关联
  5. Spring 4.1和Java 8:java.util.Optional
  6. Perl文件读写操作
  7. sdio接口_单片机基础 —— 使用SDMMC接口读写SD卡数据
  8. 哪本书是对程序员最有影响(stackoverflow)
  9. 移动互联消亡者及原因分析
  10. php扩展之redis
  11. JavaScript学习笔记——正则验证
  12. main.cpp first defined here 解决
  13. Spring之Bean的作用域、使用外部属性文件、mchange-commons-java-0.2.11.jar下载
  14. 解决github上的提交说明中文乱码的问题
  15. 【零基础】speech driven animation中文安装使用指南
  16. 还在为日语动词变形感到困惑吗?一张图即可搞定
  17. pthread_cond_wait和pthread_cond_signal函数详解
  18. outlook——分类及密送
  19. 前端学习笔记 - 触摸有几个事件?
  20. D3D Surface/Texture SDL DDraw渲染视频的区别和疑问

热门文章

  1. ceph rbd快照原理解析
  2. 与这10种人聊天终身受益
  3. hdmi网线延长器_HDMI网线延长器有何优势
  4. 负熵(看了好久,竟然这么简单,哎!…
  5. Android QR二维码扫描
  6. 传感器技术-热电阻式传感器(学习笔记三)
  7. 【转载】windows 如何一键关闭所有进程程序 --- (博客园 - 木人子韦)
  8. Java字符串比较(3种办法
  9. mybatis项目报Error parsing SQL Mapper Configuration.错误及解决方法
  10. 区块链技术在金融行业的应用