专栏首页穆书伟软件工程师树莓派获取室内温湿度的坎坷之旅

软件工程师树莓派获取室内温湿度的坎坷之旅

背景

前几天公司接受到了一份来自阿里飞天园区,IOT部门的小礼物。由于上司比较忙,无暇去顾及。

当时尚未开封,我好奇是什么,于是就急忙忙的拆开,发现是Raspberry Pi 3(树莓派3)。我觉得挺好玩的,就接过来了,于是上司就兴起,就让我拿这个小玩意去验证阿里物联网平台上的相关组件。于是,就有了这个软件工程师树莓派实现室内温湿度坎坷之旅!

以下是开箱的东西:

  1. 树莓派3(Raspberry Pi 3 Model B+)
    • 树莓派3代B+板
    • 树莓派USB电源适配器5V@2.5A
  2. 创客社区控制器(DFROBOT)
    • 数根树莓派排线
    • DHT11模块(温湿度传感器)
    • LED模块

装机

下载官网镜像

树莓派官网,点击Downloads,在所列镜像的最上面,

其中Raspbian是Raspberry Pi所有型号的官方操作系统。

下面镜像有以下2种:

  1. NOOBS:适合初学者的简易操作系统安装程序
  2. RASPBIAN:官方支持Raspberry Pi操作系统---基于Debian

我选择点击下载第二种的系统。点击完之后,你会发现,RASPBIAN有2种类型让你选择

  • 带有操作界面,Raspbian预装了大量用于教育,编程和一般用途的软件。它有Python,Scratch,Sonic Pi,Java等。
  • 不带有操作界面的LITE版本

对于我这种初次接触树莓派的人,我选择下载带有操作界面的RASPBIAN系统。

SD卡格式化

目的: 把SD卡放到TF读卡器中,插入你的电脑中,把SD卡格式化为FAT32格式。

? 鼠标右键SD卡的盘符,点击格式化。在格式化窗口文件系统中选择“[FAT32]”,然后选择在格式化选项中选择“[快速格式化]”,开点开始,等到完成即可。

? 安装GParted,右键SD卡的盘符,右键格式化,并选择FAT32,选择格式化即可。

镜像的烧写

? ​ 你需要下载一个Win32diskimager程序,然后把SD卡插入读卡器中,将上面下载的镜像拷入SD卡,完成之后,把SD卡从读卡器取下来,插入树莓派。

?

  • 下载好了之后打开zip文件所在文件夹,输入以下命令,进行解压。
 unzip 2018-10-09-raspbian-stretch.zip

替换上自己下好的zip文件名称 得到2018-10-09-raspbian-stretch.img文件,此文件就是我们要的镜像。

  • 得到镜像文件后,我们要将此镜像文件写入事先准备的TF卡内。将TF卡放入读卡器,然后接入电脑。使用
sudo fdisk -l

命令查看此设备的名称,在我的电脑上是/dev/sdb。

  • 知道读卡器的设备路径后,我们用dd命令来将镜像文件写入到TF卡内。命令如下:
sudo dd if=2018-10-09-raspbian-stretch.img of=/dev/sdc bs=2M

其中if=后面的是镜像文件名;of=后面是读卡器的设备路径。回车,执行命令等它执行完毕。

刻录过程是需要一段时间的,刻录完成了之后终端是会有显示的。

镜像刻录完成之后把tf卡放入卡槽内,把电源线插入后会看到小红灯旁边的小绿灯会闪烁,没有插卡的时候只会亮红灯,表示电源接通。绿灯闪烁表示镜像烧写是正确的,树莓派已经成功的打开。现在可以接上显示屏和键盘。

如下图所看到的样子

树莓派与温湿度采集模块连接

树莓派3b引脚图

先贴一张树莓派3b的引脚图:

在连线的时候注意编码方式,注意树莓派引脚图的方向,如上图所示。

DHT11

DHT11是一款有已校准数字信号输出的温湿度传感器。 其精度湿度+-5%RH, 温度+-2℃,量程湿度20-90%RH, 温度0~50℃。分为3个接口,分别为:VCC, DATA, GND

引脚号

名称

类型

说明

1

VCC

电源

+级,输入3V-5.5V

2

DATA

数据输出

输出引脚

3

GND

接地

接地引脚

引脚链接

我用的是三个头的dht11传感器,因此连线方式是:

VCC(或正极) --- 树莓派的3v电源

GND (地线或者负极)--- 树莓派的gnd接口

DATA (D或者out) ---树莓派的GPIO引脚

1.VCC接上3V,可以选择1口或者17

2.DATA接上GPIO口,我选的是GPIO4,第7

3.GND接上接地口,我选的是第14

Python获取室内温湿度

安装Python3

首先测试一下树莓派3安装的python版本。

sudo apt-get install python3

因为Ubuntu很多底层采用的是Python2.*,Python3和Python2是互相不兼容的,所以此时不能卸载Python2,需要将默认Python的指向Python3。

首先,删除usr/bin/目录下的默认python link文件。

sudo rm -rf /usr/bin/python

然后打开终端输入如下命令行,建立新的连接关系

sudo ln -s /usr/bin/python3.5 /usr/bim/python

然后测试一下python版本是否正确,命令行输入python即可。

编写Python代码

#!/usr/bin/python
import RPi.GPIO as GPIO
import time
 
channel =4
data = []
j = 0
 
GPIO.setmode(GPIO.BCM)
 
time.sleep(1)
 
GPIO.setup(channel, GPIO.OUT)
GPIO.output(channel, GPIO.LOW)
time.sleep(0.02)
GPIO.output(channel, GPIO.HIGH)
GPIO.setup(channel, GPIO.IN)
 
while GPIO.input(channel) == GPIO.LOW:
  continue
while GPIO.input(channel) == GPIO.HIGH:
  continue
 
while j < 40:
  k = 0
  while GPIO.input(channel) == GPIO.LOW:
    continue
  while GPIO.input(channel) == GPIO.HIGH:
    k += 1
    if k > 100:
      break
  if k < 8:
    data.append(0)
  else:
    data.append(1)
 
  j += 1
 
print("sensor is working.")
print(data)
 
humidity_bit = data[0:8]
humidity_point_bit = data[8:16]
temperature_bit = data[16:24]
temperature_point_bit = data[24:32]
check_bit = data[32:40]
 
humidity = 0
humidity_point = 0
temperature = 0
temperature_point = 0
check = 0
 
for i in range(8):
  humidity += humidity_bit[i] * 2 ** (7-i)
  humidity_point += humidity_point_bit[i] * 2 ** (7-i)
  temperature += temperature_bit[i] * 2 ** (7-i)
  temperature_point += temperature_point_bit[i] * 2 ** (7-i)
  check += check_bit[i] * 2 ** (7-i)
 
tmp = humidity + humidity_point + temperature + temperature_point
 
if check == tmp:
  print("temperature :", temperature, "*C, humidity :", humidity, "%")
else:
  print("wrong")
  print("temperature :", temperature, "*C, humidity :", humidity, "% check :", check, ", tmp :", tmp)
 
GPIO.cleanup()

展示结果

为了测试结果是否准确,我把手指放到传感器上,测试的数据为:

测试无误~~~.

MQTT发布消息到代理服务器

安装paho-mqtt

使用pip工具安装paho-mqtt,输入以下指令即可:

sudo pip install paho-mqtt

Python发布消息Demo

import paho.mqtt.client as mqtt
import time
import json
​
#当代理响应连接请求时调用。
#rc的值决定了连接成功或者不成功
def on_connect(client, userdata, flags, rc):
    print("Connected with result code " + str(rc))
​
#当收到关于客户订阅的主题的消息时调用
def on_message(client, userdata, msg):
    print(msg.topic + " " + str(msg.payload))
​
​
client = mqtt.Client()
#客户端初始化,设置客户端id等信息
client.reinitialise(client_id="test01",clean_session=True,userdata=None)
#客户端设置用户名,密码信息
client.username_pw_set(username="123456",password="2236FDE7A9744017E25C95B333E5D546AF354F74463EF6FDABA09AC20C19306979DA982C9659877D4896336A7E3484F12B1BAFF773B8343A2AA75CC9EC8B51B2")
client.on_connect = on_connect
client.on_message = on_message
​
#组装json数据
s = {'name':'mushuwei','age':24}
jo = json.dumps(s)
​
try:
    #connect()函数将客户端连接到代理。 这是一个阻塞函数。
    client.connect("127.0.0.1", 1883, 600)
    while True:
        #从客户端发送消息给代理。 publish(topic, payload=None, qos=0, retain=False)
        client.publish('test', payload=jo, qos=0)
        time.sleep(1)
    client.loop_forever(timeout=1.0,max_packets=1,retry_first_connection=False)
except KeyboardInterrupt:
    client.disconnect()
​

将上面获取到的温湿度数据放在一个函数里,组装成json数据,放到负载里,发布消息给代理。即可!

订阅test主题的客户端数据展示如下:

至于MQTT代理服务器代码的编写,可以参考我之前写的文章:

其他

关于IOT市场与技术模拟详解到这里就结束了。

原创不易,如果感觉不错,希望给个推荐!您的支持是我写作的最大动力!

下文会大家逐步用Netty实现MQTT协议的IOT服务器。

版权声明:

作者:穆书伟

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 作为软件开发人员需要的技术技能

    我们一度都是新手,开始时可能有点困难。但是,如果您刚刚成为一名专业软件开发人员,那么本文将包含一些实用且易于理解的建议。

    sanshengshui
  • 拨乱反正-重构是门艺术活

    因为我们部门内容平台的文章系统之前遗留了很多问题,急需解决这些具有"坏味道"的代码。最后因为其他人手头里都有其他工作,最后这些任务就交给了我。以下是急需解决的问...

    sanshengshui
  • 第四章-使用本机文件对话框和帮助进程间沟通 | Electron实战

    在前一章中,我们为第一个Electron项目打下了基础,这是一个笔记应用程序,它从左窗格中取出Markdown,并在右窗格中将其呈现为HTML。我们设置了主进程...

    sanshengshui
  • 树莓派上利用 Tensorflow 实现小车的自动驾驶

    github传送门:https://github.com/Timthony/self_drive

    芋道源码
  • 高效搭建树莓派3b rt-thread的开发环境

    由于电子设备的普及,越来越多人拥有树莓派,不管是作为电子极客,还是作为普通普通人,很多人都会玩一下树莓派,可以学习一些c语言,也可以学习嵌入式。...

    bigmagic
  • 树莓派资源整理

    本文收集了树莓派使用过程中经常需要用到的资源,主要包括树莓派系统镜像、树莓派硬件介绍、树莓派GPIO引脚编号、树莓派电路原理图下载、树莓派应用等等,非常值得收藏...

    py3study
  • 第一章 漫谈RaspberryPi

       Raspberry Pi(中文名为“树莓派”,简写为RPi,(或者RasPi / RPI)是为学习计算机编程教育而设计),只有信用卡大小的微型电脑,其系统...

    张国平
  • 揭秘奸商的伎俩:利用树莓派自制“恶意充电宝”实验

    重温一遍今年的315晚会。看完只想骂一句奸商!晚会上披露了一个可以通过充电控制用户手机的内容,作为离了手机就丢了半条命的现代人,经常会遇到在外手机没电借别人充电...

    FB客服
  • 树莓派4发布!CPU提升3倍,性能堪比主流PC,AI能力大增,顶配售价55美元

    “这太疯狂了!USB 3.0!千兆以太网!WiFi 802.11ac,蓝牙5.0,4GB内存!4K60帧显示!最贵才55美元?!”

    量子位
  • 树莓派变身软路由——安装openwrt

    最近闲来无事,手头刚好有限制的树莓派。由于安装kali,性能不足。安装原版树莓派镜像又不是刚需。所以奢侈了一会,刷了个openwrt镜像当软路由使用。

    行云博客

扫码关注云+社区

领取腾讯云代金券