×

使用NodeMCU进行温度/湿度测量

消耗积分:0 | 格式:zip | 大小:0.13 MB | 2023-01-05

526774

分享资料个

描述

介绍

我没有智能家居,但我想了解我们家中几个房间的温度/湿度统计数据。因此,我开始在 Raspberry Pi 3B+ 上放置一些带有 BME280 的 NodeMCU,并使用 MQTT、InfluxDB、Telegraf 和 Grafana 安装监控。在我看来,最好的部分是:您不需要任何互联网服务,您的数据就在家里......

我们需要什么步骤

  • 安装 mosquitto (mqtt)
  • 安装 InfluxDB
  • 安装电报
  • 安装grafana
  • 用 micropython 准备 NodeMCU
  • 自定义boot.py
  • 上传boot.py到 NodeMCU
  • 在 Grafana 中创建仪表板

安装蚊子

非常简单,只需输入:

 sudo apt install mosquitto mosquitto-clients

Themqtt-daemon 自动启动。

安装 InfluxDB 和 Telegraf

sudo apt update
sudo apt install influxdb telegraf
sudo systemctl enable influxdb
sudo systemctl start influxdb 
influx
CREATE USER admin WITH PASSWORD 'password' WITH ALL PRIVILEGES
CREATE DATABASE telegraf
CREATE DATABASE rooms

编辑 influxdb 配置文件

sudo nano /etc/influxdb/influxdb.conf

删除前面的“#”

[http]
 # Determines whether HTTP endpoint is enabled.
  enabled = true
 # The bind address used by the HTTP service.
  bind-address = ":8086"
 # Determines whether user authentication is enabled over HTTP/HTTPS.
  auth-enabled = true

之后你必须重新启动服务:

sudo systemctl restart influxdb

编辑 Telegraf 配置文件:

sudo nano /etc/telegraf/telegraf.conf
omit_hostname = true
[[outputs.influxdb]]
 ## The target database for metrics; will be created as needed.
  database = "telegraf"
# we create a seperate database for our measurements, so we don't want the 
#  data in the telegraf-database
  namedrop = ["sensors*"]
 ## HTTP Basic Auth
  username = "admin"
  password = "password"

现在我们数据的配置文件:

sudo nano /etc/telegraf/telegraf.d/sensors.conf
# Input data as json-String
[[inputs.mqtt_consumer]]
 servers = ["tcp://localhost:1883"]
 topics = [
   "sensors/#",
 ]
 client_id = "telegraf"
 data_format = "json"
 name_prefix = "sensors_"
 json_name_key = "location"
 tag_keys = ["temperature","humidity"]
 json_string_fields = ["location"]
# Output for influxdb
[[outputs.influxdb]]
 urls = ["http://127.0.0.1:8086"]
 username = "admin"
 password = "password"
 database = "rooms"
 namepass = ["sensors*"]

安装 Grafana

检查是否有更新版本:下载Grafana

sudo dpkg -i grafana_5.4.1_armhf.deb 

使用 micropython 准备 NodeMCU

下载 ESP8266 的二进制固件:esp8266-20180511-v1.9.4.bin

按照此处所述部署固件

按照此处所述安装ampy

使用 ampy 将boot.py上传到您的 NodeMCU:

ampy -p ttyUSB0 -b 115200 put boot.py

之后,您应该重置 NodeMCU,以便它可以开始将测量值发送到您的数据库。

按照此处所述制作您的第一个 Grafana 仪表板


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'使用NodeMCU进行温度/湿度测量',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);