(开源)微信小程序+mqtt,esp8266温湿度读取


Posted in Javascript onApril 02, 2021

(开源)微信小程序+mqtt,esp8266温湿度读取

第一、原理讲解

esp8266 通过mqtt发布消息,微信小程序通过mqtt 订阅消息,小程序订阅后,就可以实时收到esp8266 传输来的消息。

第二、温湿度测试

(开源)微信小程序+mqtt,esp8266温湿度读取
这里使用的是D4口。

本demo 是利用arduino IDE开发,关于arduino IDE 的ESP8266环境配置可参考:环境配置: 点击跳转

安装库
本案例使用一个非常简单易用且与ESP8266配合使用的是Simple DHT传感器库。可以通过Arduino IDE Library Manager轻松安装该库。
在 arduino IDE上方选项处----> 工具—>管理库,然后直接搜索dht11即可。点击安装库,如下图:

(开源)微信小程序+mqtt,esp8266温湿度读取

测试程序:

#include <SimpleDHT.h>

// for DHT11, 
//      VCC: 5V or 3V
//      GND: GND
//      DATA: 2
int pinDHT11 = D4;
SimpleDHT11 dht11(pinDHT11);

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

void loop() {
  // start working...
  Serial.println("=================================");
  Serial.println("Sample DHT11...");
  
  // read without samples.
  byte temperature = 0;
  byte humidity = 0;
  int err = SimpleDHTErrSuccess;
  if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
    Serial.print("Read DHT11 failed, err="); Serial.println(err);delay(1000);
    return;
  }
  
  Serial.print("Sample OK: ");
  Serial.print((int)temperature); Serial.print(" *C, "); 
  Serial.print((int)humidity); Serial.println(" H");
  
  // DHT11 sampling rate is 1HZ.
  delay(1500);
}

正常工作的话,串口会正常输出的,如下图所示:

(开源)微信小程序+mqtt,esp8266温湿度读取

第三、温湿度推送到云端

如果上一步的温湿度可以读取输出,那么就可以在上版的基础上,把数据上传到云端。

增加了按钮控制,数据用#号包裹,以便app采用字符串切割,分割出来数据,#23#80#on,即#温度#湿度#按钮状态,小程序端会根据#号分割字符串进行取值,以便显示。

如果上传的数据不止温湿度,可在#号后面继续添加&msg=#23#80#data1#data2#data3#data4#\r\n,app字符串分割的时候,要根据上传的数据进行分割

升级版程序下载:

点击下载 https://cloud.bemfa.com/zip/mqtt/dht11_led.zip

需要修改的地方

const char* ssid = "newhtc";                  //修改,修改为你的路由的WIFI名字
const char* password = "qq123456";           //修改为你的WIFI密码
const char* mqtt_server = "bemfa.com";       //默认,MQTT服务器地址
const int mqtt_server_port = 9501;          //默认,MQTT服务器端口
#define ID_MQTT  "4d9ec352e0376f2110a0c601a2857225"   //mqtt客户端ID,修改为你的开发者密钥
const char*  topic = "led002";                       //Led主题名字,可在巴法云控制台自行创建,名称随意
const char * dhttopic = "temp004";                 //温湿度主题名字,可在巴法云mqtt控制台创建
int pinDHT11 = D4;                         //dht11传感器引脚输入
int B_led = D5;                           //控制的led引脚
long timeval = 3*1000;                    //上传的传感器时间间隔,默认3秒

在巴法mqtt设备云控制台 新建两个主题,主题名字随意,例如temp004 用于传输温湿度,led002用于控制led,本实例用用temp004和led002使用示例代码时应修改为自己的主题名字,字母或数字或字母加数字组合。UID为用户私钥,在 巴法创客云控制台 注册登陆后可获得。

注意:在mqtt设备云创建主题。

登陆完成后,可在控制台看到自己的私钥UID,如图所示:

(开源)微信小程序+mqtt,esp8266温湿度读取

WIFI名称为自己的路由器WIFI名称,区分大小写,写错会导致连接不上网络的。

例程中,每三秒上传一次数据:

long now = millis();//获取当前时间戳
  if (now - lastMsg > timeval) {//如果达到3s,进行数据上传
    lastMsg = now;
    // read without samples.
    byte temperature = 0;
    byte humidity = 0;
    int err = SimpleDHTErrSuccess;
    if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
      Serial.print("Read DHT11 failed, err="); Serial.println(err); delay(1000);
      return;
    }
    String  msg = "#" + (String)temperature + "#" + (String)humidity + "#" + ledstatus; //数据封装#温度#湿度#开关状态#
    client.publish(dhttopic, msg.c_str());//数据上传
  }

如果路由器有网络的话,数据会自动上传,可在巴法mqtt设备云 刷新网页,即可看到上传的数据。如下图所示:

(开源)微信小程序+mqtt,esp8266温湿度读取
(开源)微信小程序+mqtt,esp8266温湿度读取
数据上传时用#号进行了封装,27是温度,24是湿度,off是上传的灯的状态。

第四、微信小程序开发

在 微信公众平台注册小程序账号,拿到小程序 appid,右侧点击 -开发–> 开发管理–>开发设置---->开发者ID,里面可以看到,长的大概是这样:wx34a2063de5cec04b,下面导入项目的时候会用到。

右侧点击 -开发–> 开发管理–>开发设置---->服务器域名。下方服务器域名处,点击修改,在request合法域名处,和 socket合法域名处 ,分别添加域名https://api.bemfa.com 和wss://bemfa.com 保存提交即可。如下图。

(开源)微信小程序+mqtt,esp8266温湿度读取
下载安装微信开发者工具,可百度下载。

下载demo示例程序。下载地址: 点击下载

打开微信开发者工具,小程序项目,导入项目。在目录处选择刚刚下载解压的demo示例程序,AppID处填入你的小程序AppID,然后点击下方导入即可。如下图。

(开源)微信小程序+mqtt,esp8266温湿度读取
本示例程序非常简单,各位大神可以继续开发添加各种功能,添加背景,优化色彩等等,如果只是简单使用,只需修改/pages/index/index.js 文件中uid 和topic 信息为自己的即可,这里的uid和topic需要和esp8266填入的uid和topic相同,这里有两个主题,一个用于传输温度和湿度,一个用于控制LED。如下图。

data: {
    uid:"4d9ec352e0376f2110a0c601a2857225",//用户密钥,巴法云控制台获取
    ledtopic:"led002",//控制led的主题,mqtt控制台创建
    dhttopic:"temp004",//传输温湿度的主题,控制台创建
    device_status:"离线",// 显示led是否在线的字符串,默认离线
    ledOnOff:"关闭",
    checked: false,//led的状态。默认led关闭
    wendu:"",//温度值,默认为空
    shidu:"",//湿度值,默认为空
    ledicon:"/utils/img/lightoff.png",//显示led图标的状态。默认是关闭状态图标
    client: null,//mqtt客户端,默认为空
  },

修改完毕后,ctrl+s 保存修改。可以点击左边屏幕上的按钮进行调试,如下图。

(开源)微信小程序+mqtt,esp8266温湿度读取
console控制台可以查看小程序的调试信息。默认每3秒会自动请求一下服务器上的数据,查看esp8266的状态信息。点击打开或者关闭按钮,打开esp8266串口调试助手,可查看esp8266是否收到指令,如果第一步esp8266已联网,都是可以收到信息的。

如果界面和其他功能都开发完毕。可以点击微信开发者工具的上面的上传按钮,如下图。

(开源)微信小程序+mqtt,esp8266温湿度读取
上传成功后,再登陆刚刚注册的微信公众平台,在版本管理处,可以看到自己刚刚上传的小程序,提交审核即可,等一天左右,一般都会通过,通过后登陆微信公众平台,提交发布即可。如果是自己使用的,做好加上登陆验证功能,比如验证匹配一下某个字符串是否正确等等,不然小程序上线后别人也可以随意控制了。

(开源)微信小程序+mqtt,esp8266温湿度读取

Javascript 相关文章推荐
JavaScript 学习笔记 Black.Caffeine 09.11.28
Nov 30 Javascript
javascript跨域刷新实现代码
Jan 01 Javascript
Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
Mar 12 Javascript
Jquery树插件zTree用法入门教程
Feb 17 Javascript
javascript动态设置样式style实例分析
May 13 Javascript
javascript检查浏览器是否已经启用XX功能
Jul 10 Javascript
javascript中undefined与null的区别
Aug 16 Javascript
Jquery日历插件制作简单日历
Oct 28 Javascript
浅析函数声明和函数表达式——函数声明的声明提前
May 03 Javascript
原生JS+Canvas实现五子棋游戏
May 28 Javascript
微信小程序使用Socket的实例
Sep 19 Javascript
改变layer confirm弹窗按钮的颜色方法
Sep 12 Javascript
Javascript中的解构赋值语法详解
Apr 02 #Javascript
Ajax实现局部刷新的方法实例
前端学习——JavaScript原生实现购物车案例
JavaScript中关于预编译、作用域链和闭包的理解
JavaScript 去重和重复次数统计
Mar 31 #Javascript
vue中三级导航的菜单权限控制
Mar 31 #Vue.js
jQuery class属性操作addClass()与removeClass()、hasClass()、toggleClass()
You might like
php基础教程 php内置函数实例教程
2012/08/21 PHP
php使用wordwrap格式化文本段落的方法
2015/03/17 PHP
WordPress中&quot;无法将上传的文件移动至&quot;错误的解决方法
2015/07/01 PHP
YII2.0框架行为(Behavior)深入详解
2019/07/26 PHP
Javascript学习笔记1 数据类型
2010/01/11 Javascript
JavaScript显示当然日期和时间即年月日星期和时间
2013/10/29 Javascript
JS window对象的top、parent、opener含义介绍
2013/12/03 Javascript
js模仿hover的具体实现代码
2013/12/30 Javascript
JSON中双引号的轮回使用过程中一定要小心
2014/03/05 Javascript
javascript从image转换为base64位编码的String
2014/07/29 Javascript
JavaScript函数学习总结以及相关的编程习惯指南
2015/11/16 Javascript
JavaScript检查子字符串是否在字符串中的方法
2016/02/03 Javascript
JS上传组件FileUpload自定义模板的使用方法
2016/05/10 Javascript
AngularJS使用指令增强标准表单元素功能
2016/07/01 Javascript
第一次接触神奇的Bootstrap表单
2016/07/27 Javascript
NodeJs读取JSON文件格式化时的注意事项
2016/09/25 NodeJs
通过jquery toggleClass()属性制作文章段落更改背景颜色
2018/05/21 jQuery
mpvue中使用flyjs全局拦截的实现代码
2018/09/13 Javascript
详解如何快速配置webpack多入口脚手架
2018/12/28 Javascript
javascript json字符串到json对象转义问题
2019/01/22 Javascript
TypeScript中的方法重载详解
2019/04/12 Javascript
详解Vue组件之间通信的七种方式
2019/04/14 Javascript
微信小程序上线发布流程图文详解
2019/05/06 Javascript
详解如何写出一个利于扩展的vue路由配置
2019/05/16 Javascript
微信小游戏中three.js离屏画布的示例代码
2020/10/12 Javascript
python连接oracle数据库实例
2014/10/17 Python
python二分查找算法的递归实现方法
2016/05/12 Python
十行代码使用Python写一个USB病毒
2019/06/21 Python
python 判断字符串中是否含有汉字或非汉字的实例
2019/07/15 Python
墨西哥巴士车票在线购买:ClickBus
2018/03/27 全球购物
卫校毕业生自我鉴定
2013/10/31 职场文书
领导党性分析材料
2014/02/15 职场文书
实习计划书范文
2015/01/16 职场文书
三八妇女节慰问信
2015/02/14 职场文书
html5 录制mp3音频支持采样率和比特率设置
2021/07/15 Javascript
《我的美好婚事》动画化决定纪念插画与先导PV公开
2022/04/06 日漫