本文所介绍的内容基于树莓派瑞士军刀扩展板(SAKS),由于 SAKS 基于树莓派通用的 GPIO 设计,文中的原理和代码也适用于其他情况。

本文由树莓派实验室创作,遵循CC协议(署名-非商业性使用-禁止演绎-相同方式共享),欢迎树莓派爱好者们遵循协议内容转载传播。谢绝不遵守协议的转载和抄袭。

本节以 SAKS 扩展板为硬件基础,实现所在城市PM2.5指数显示,并用三色LED配合蜂鸣器警报来提示环境状态。由于要监测当前环境的PM2.5需要专用传感器,气象发布机构已经对每个城市做了空气指数的采集,我们可以利用他们发布的数据显示出来,即可满足日常对PM2.5的关注需求。

由于我们已经开始基于 SAKS SDK 开发(了解 SAKS SDK 发布的信息请阅读这里),本例程中涉及到的 SAKS 扩展板引脚编号我们根本不需要再关心。

首先,要获取互联网上的PM2.5数据,可以搜索一下专业机构的API,下面的例子使用的是和风天气的API。要使用他们的API,需要简单注册一下,会得到一个字符串Key,在下面的例子中填入这个Key就可以调用他们的数据了。另外需要找到自己所在城市对应的编码替换“CN101020100”这一段代码。注意,并不是所有的城市下辖的区域都有PM2.5数据,因此在选择城市的时候尽量选择有PM2.5数据的区域。

用 Python 实现获得PM2.5指数的程序,这个方法返回一个PM2.5数值,如果返回-1,表示数据获取失败:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
'''
cityid 和 key 需要根据实际情况替换
参考 http://www.heweather.com/documents/api
http://www.heweather.com/documents/cn-city-list
'''
weather_url = 'https://api.heweather.com/x3/weather?cityid=CN101020100&key=xxx'
def get_pm25():
    global weather_url
    req = urllib2.Request(weather_url)
    resp = urllib2.urlopen(req)
    content = resp.read()
    if(content):
        weatherJSON = json.JSONDecoder().decode(content)
        #print(content)
        try:
            if weatherJSON['HeWeather data service 3.0'][0]['status'] == "ok":
                if weatherJSON['HeWeather data service 3.0'][0].has_key('aqi'):
                    print(weatherJSON['HeWeather data service 3.0'][0]['aqi']['city']['pm25'])
                    return int(weatherJSON['HeWeather data service 3.0'][0]['aqi']['city']['pm25'])
                else:
                    return -1
            else:
                return -1
        except:
            return -1

下面直接调用SAKS SDK的方法来让LED和蜂鸣器工作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
if __name__ == "__main__":
    while True:
        pm25 = get_pm25()
        if pm25 == -1:
            time.sleep(30)
            continue
        #严重污染,红灯亮蜂鸣器Beep
        if pm25 >= 250:
            SAKS.ledrow.off()
            SAKS.ledrow.items[7].on()
            SAKS.buzzer.beepAction(0.05,0.05,3)
        #重度污染,红灯亮
        if pm25 < 250:
            SAKS.ledrow.off()
            SAKS.ledrow.items[7].on()
        #中度污染,红灯亮
        if pm25 < 150:
            SAKS.ledrow.off()
            SAKS.ledrow.items[7].on()
        #轻度污染,黄灯亮
        if pm25 < 115:
            SAKS.ledrow.off()
            SAKS.ledrow.items[6].on()
        #良,一个绿灯亮
        if pm25 < 75:
            SAKS.ledrow.off()
            SAKS.ledrow.items[4].on()
        #优,两个绿灯亮
        if pm25 < 35:
            SAKS.ledrow.off()
            SAKS.ledrow.items[4].on()
            SAKS.ledrow.items[5].on()
        #print (("%4d" % pm25).replace(' ','#'))
        #数码管显示PM2.5数值
        SAKS.digital_display.show(("%4d" % pm25).replace(' ','#'))
        time.sleep(1800)
    input("Enter any keys to exit...")

上面加入了每30分钟读取一次PM2.5指数并刷新数码管的逻辑。由于数码管的 show 方法已经封装了数码管的逻辑,因此任何时候调用数码管显示数值,只需要调用这个方法,把数值作为参数提供即可。
SAKS.ledrow.items[7].on() 表示第8个LED亮,SAKS.ledrow.off() 表示所有LED熄灭。SAKS SDK 已经将瑞士军刀的操作作了封装,只用知道如何应用即可,当然有兴趣也可以下载 SDK 的源码研究。
将上面的程序源码保存为 main.py 接下来如果要运行,请注意程序开头的 from sakshat import SAKSHAT,需要导入 SAKS SDK 模块。为此我们需要将 SAKS SDK 模块的相关文件和 main.py 放在一起才能正确执行 main.py 程序。我们准备了一个包含 main.py 和 SAKS SDK 的包并在 Github 上提供下载:https://github.com/spoonysonny/SAKS-tutorials/tree/master/pm25-display

在终端运行:

1
2
3
4
git clone https://github.com/spoonysonny/SAKS-tutorials.git
cd SAKS-tutorials
cd pm25-display
sudo python main.py

PM2.5指数显示在了 SAKS 扩展板上,数码管下方的LED同时显示了空气质量状态。

树梅派应用38:树莓派 SAKS 扩展板挑战应用 之 PM2.5 指示灯相关推荐

  1. [树梅派专题笔记]树莓派忘记密码怎么办?

    树梅派登入忘记密码问题 我的树梅派 4B 因"吃灰"很久了导致登入密码忘记,怎么解决呢? 解决步骤 我的树梅派之前烧入的是 ubuntu 系统,我首先找到一台装有 ubuntu 系 ...

  2. 震惊!树梅派Linux(Ubuntu)还能制作windows7系统启动u盘(成功)

    这是一个阴云蔽日的周二,看着杂乱无张的系统,我实在忍不住了. 掏出装满种子的U盘,制作了一个U盘启动盘,但cha.......... u盘损坏,看着一旁的树梅派,嘿嘿嘿 --------------- ...

  3. 树梅派64位系统的安装及远程连接配置

    今早我的树梅派突然GG了,我只好重装系统,考虑到之前的32位系统的不方便,直接安装64位系统: [树莓派4b教程] 2 64位系统安装与配置 [树莓派4b教程] 3 详解远程登录的 2 种方式:SSH ...

  4. 树梅派学习 21. 串口连接

    树梅派学习 21. 串口连接 接线: 其中6.8.10 是串口的引脚. 1. 执行命令 sudo apt-get update sudo apt-get upgrade sudo reboot 2. ...

  5. 树梅派4使用Docker安装可道云

    以下是我安装过程当中的步骤: 前往树梅派官网下载一个系统. 将下载完成的系统解压. 将准备好的SD卡插进电脑,使用Win32DiskImager将步骤2下载好的系统(.img结尾的文件)烧录到SD卡, ...

  6. 树梅派4BUnbuntu更换中科大源

    树梅派4B Unbuntu 20.04LTS更换中科大源 树莓派是arm架构不是amd64!!!不要简单粘贴复制!!! 首先备份sources.list文件 cd /etc/apt sudo cp s ...

  7. 玩树梅派学linux-shell编程

    系列文章目录 玩树梅派学linux-shell编程 文章目录 系列文章目录 前言 一.shell是什么? 二.shell脚本有哪些作用 三.开始我们的shell之旅 1.hello shell 2.$ ...

  8. 树梅派4B 安装使用 Manjaro-ARM 64位系统 samba tigervnc iptables防火墙

    你可能要问 manjaro 有什么好的? 看图,不多说. 介绍 64位系统 排名第一的,最易用的KDE桌面 迅雷,QQ ,微信,和最新软件,一个不少 manjaro 有最为丰富的软件仓库 最新的软件, ...

  9. 3B+树梅派SD卡安装Ubuntu系统

    树梅派官网:https://www.raspberrypi.org/ 1 .点击 Software 2.Raspberry PI OS 3.下拉 根据 系统 选择 为选择的 是第二个 4.拷贝 工具( ...

  10. 树梅派上搭建tensorflow+opencv+pi camera的物体识别

    树梅派上搭建tensorflow+opencv的物体识别 前言 硬件及软件版本 安装及环境配置 模型配置 连接摄像头 树莓派显示 识别截图 前言 此教程参考自https://www.jianshu.c ...

最新文章

  1. MySql遇到字段中有空格
  2. 如何设计一个端计算架构?
  3. c++ 箭头符号怎么打_老司机怎么测量三极管管型、管脚和性能?三极管测量此中有深意...
  4. JAVA API----Date类
  5. 国家哀悼日将网站全部变成灰色的代码
  6. DataGrid与GridView中删除前提示框与编辑框长度设置的实现(ASP.NET)
  7. java spring多数据源配置文件_深入理解spring多数据源配置
  8. linux 叫号程序,linux socket编程有关问题,上面是小弟我做的一个简单的模拟银行排队叫号系统...
  9. 【Delta并联机器人Simscape仿真(正运动学、逆运动学)】
  10. 黑客工具软件大全100套
  11. 抖音短视频无水印下载方法
  12. Session的钝化和活化(序列化和反序列化)
  13. 小皮面板安装以及pikachu环境搭建
  14. matlab彩色图像处理实验报告,matlab简单图像处理实验报告
  15. uni-app -- 改变页面背景颜色
  16. 干货 | 视频插帧的方案实现与对比~~
  17. Masimo宣布首款用于 Root(R)患者监护与互联总机的第三方Masimo Open Connect(R)模块获得CE标记
  18. 数据类型(int、short、long、long long、unsigned、char、float、double)
  19. php鼠标移过图片放大代码,鼠标移上去,图片会自动原地放大CSS写法
  20. 达梦数据库odbc的安装

热门文章

  1. js获取并设置lt;pgt;lt;/pgt;的显示的值。
  2. 3D中的OBJ文件格式详解
  3. SAP采购申请中数量/单价/价格单位/总价的填写图示
  4. 从 0 开始学游戏开发
  5. WordPress安装教程
  6. [Unity] 二维洞穴地图随机生成
  7. js中对象属性、面向对象、面向过程、类、继承、以及原型原型链
  8. 作品交流:调制解调-勘误情况
  9. iOS 5 故事板入门(3)
  10. UE4 设置Play下的默认相机FOV(Field Of View)视角