0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

用Raspberry Pi和传感器制作“可自动营造舒适空间的装置” 第二部分

吕钢格 来源:罗姆 作者:罗姆 2023-03-01 11:15 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

大家好,我是吉田!
我们这次要创作一款让家中更舒适、让在家办公更高效的设备,本文是第二部分。第一部分介绍了制作纲要和所需部件。这次我们将实际连接Bluetooth传感器和Raspberry Pi。使用罗姆SensorMedal,您甚至可以远程轻松地将传感器值共享给Raspberry Pi!

pYYBAGPzGSyASspjAAG_TBVpFfg091.jpg

本部分所需部件

Raspberry Pi 3 B+ 或 Raspberry Pi 4 Model B

poYBAGPzGsaAP1GPAACgjfKDWVg250.jpg

Raspberry Pi 3 B+

poYBAGPzGsmAPwNLAACvO9u33bY417.jpg

Raspberry Pi 4 Model B

罗姆SensorMedal(SensorMedal-EVK-002)

poYBAGPzGsyAZvoKAAB6V-XqblY393.jpg

手机电池

pYYBAGPzGpiAWSk2AAA4faohBjA382.jpg

USB设备

使用100日元商店就能买到的USB迷你灯和迷你风扇等物件

poYBAGPzGpyAD08DAAE81HV2ez4907.jpg

本部分的流程

罗姆SensorMedal与Raspberry Pi的BLE连接

Raspberry Pi的USB控制

使用传感器值让硬件工作的程序

总结

1. 罗姆SensorMedal与Raspberry Pi的BLE连接

在第一部分中,我将罗姆SensorMedal连接到我的智能手机上并显示了结果。在本项目中,Raspberry Pi将作为接收数据的航空母舰使用,所以在第二部分中,我们将通过Raspberry Pi的Bluetooth功能连接SensorMedal。

首先,安装的Python程序bluepy,以便进行Raspberry Pi的Bluetooth连接。

pi@raspberrypi:~ $ sudo pip3 install bluepy
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting bluepy
  Downloading https://www.piwheels.org/simple/bluepy/bluepy-1.3.0-cp37-cp37m-linux_armv7l.whl (560kB)
    100% |████████████████████████████████| 563kB 608kB/s 
Installing collected packages: bluepy
Successfully installed bluepy-1.3.0

然后,开启SensorMedal和Raspberry Pi的电源,并将它们放在附近。

poYBAGPzGwiAbb4UAALrUmcJRDA619.jpg

通过Bluetooth将SensorMedal连接到Raspberry Pi。有一个可以显示来自SensorMedal的数值的方便程序,我们直接下载这个程序即可(我使用的是这里的Github)。

pi@raspberrypi:~ $  sudo mkdir Programs
pi@raspberrypi:~ $  cd Programs
pi@raspberrypi:~ $  sudo git clone http://github.com/bokunimowakaru/SensorMedal2

打开已下载的SensorMedal2文件夹,并执行以下示例程序。这个需要在Python 3中使用sudo权限执行。

pi@raspberrypi:~ $  cd SensorMedal2
pi@raspberrypi:~ $  sudo python3 ble_logger_SensorMedal2.py

怎么样?是不是很简单?如下图所示,从Raspberry Pi能够很轻松地看到SensorMedal传来的测量值。

pYYBAGPzGxGAcR2gAASQ-D3uNYw245.png

SensorMedal中共内置6种传感器。每种传感器的含义如下,使用这些传感器可以测量并获取相应的数值。

Temperature: 温度(℃)

Humidity: 湿度(%)

Pressure: 气压(hPa)

Illuminance: 亮度(lx)

Accelerometer: 加速度(x轴、y轴、z轴)(g)

Geomagnetic: 陀螺仪传感器值(x轴、y轴、z轴)(uT)

Magnetic: 霍尔传感器值(磁铁在附近通过为1,否则为0)

Steps: 步数(步)

Battery Level: 电池电量

2. Raspberry Pi的USB 控制

我们已经非常轻松地获得了传感器的值,现在,让我们使用这些值来控制与Raspberry Pi连接的硬件吧。
先来实现第一部分中提到的“要是能自动搞定就好了(要是有这些功能就好了)”列表中的以下两项。

编号 检测功能 检测后希望具备的功能
1 检测房间的温度 根据室温控制风扇等
2 检测工作台周围的亮度 亮度不够时自动开灯

亮度会因天气变化和房间情况而发生变化。如果亮度不够还继续工作的话,眼睛会很疲劳,所以我们使用SensorMedal的亮度值——Illiminance(lx)。亮度(光照强度)的单位是“勒克斯”。白天房间的亮度约为200〜300(lx)。

测好亮度后,我们用一个USB迷你灯来实现亮度不足时自动开灯的功能。如下图所示,将迷你灯插入Raspberry Pi的 USB端口

poYBAGPzGxWABiMjAAHdLbsqv50587.jpg

安装一个库来控制USB,让它可以根据亮度开灯和关灯。如下所示,下载并安装库文件。

pi@raspberrypi:~ $  wget https://www.gniibe.org/oitoite/ac-power-control-by-USB-hub/hub-ctrl.c
pi@raspberrypi:~ $  sudo apt-get install libusb-dev
pi@raspberrypi:~ $  gcc -o hub-ctrl hub-ctrl.c -lusb

现在,就可以通过命令打开和关闭插入USB端口的设备啦。这个“hub-ctrl”的使用方法为“hub-ctrl -b [Bus Num] -d [Device Num] -P [Port Num] -p [On:1 / Off:0] ”。使用“lsusb -t”命令获取设备连接信息。在这里,Bus num: 1, Device num: 2, USB端口的Port num为2。

pi@raspberrypi:~ $  hub-ctrl
Hub #0 at 001:002
 INFO: individual power switching.
 WARN: Port indicators are NOT supported.
Hub #1 at 001:001
 INFO: ganged switching.
 WARN: Port indicators are NOT supported.

pi@raspberrypi:~ $  lsusb -t
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/5p, 480M
        |__ Port 1: Dev 3, If 0, Class=Vendor Specific Class, Driver=smsc95xx, 480M

如下所示,在“-p”后置“0”将关闭电源,置“1”则打开电源。

pi@raspberrypi:~ $  sudo hub-ctrl -b 1 -d 2 -P 2 -p 0
pi@raspberrypi:~ $  sudo hub-ctrl -b 1 -d 2 -P 2 -p 1

poYBAGPzGxqAVGlQAAGRquEa67g590.jpg

这是指定“-p 1”时的状态。连接到USB端口的灯亮了

3.使用传感器值让硬件工作的程序

下面,我们将创建程序,把来自SensorMedal的数值与USB控制关联起来。
基本上,可以使用前面下载的 SensorMedal2 程序。

pi@raspberrypi:~ $  sudo cp ble_logger_SensorMedal2.py ble_illum.py

我在原程序基础上,添加了下述第9行和第78〜85行的内容。当亮度低于300lx时,让灯点亮。当亮度高于该值时,让灯熄灭。

#!/usr/bin/env python3
# coding: utf-8

from __future__ import (division, absolute_import, print_function,
                                unicode_literals)
import fcntl
import socket
import struct
import os

def get_addr(ifname):
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        return socket.inet_ntoa(
            fcntl.ioctl(
                s.fileno(),
                0x8915,  # SIOCGIFADDR
                struct.pack('256s', ifname[:15].encode('utf-8')))[20:24])
    except IOError:
        return 'Not Found!'

interval = 10 # 工作间隔

from bluepy import btle
from sys import argv
import getpass
from time import sleep

def payval(num, bytes=1, sign=False):
    global val
    a = 0
    for i in range(0, bytes):
        a += (256 ** i) * int(val[(num - 2 + i) * 2 : (num - 1 + i) * 2],16)
    if sign:
        if a >= 2 ** (bytes * 8 - 1):
            a -= 2 ** (bytes * 8)
    return a

scanner = btle.Scanner()
while True:    
    try:
        devices = scanner.scan(interval)
    except Exception as e:
        print("ERROR",e)
        if getpass.getuser() != 'root':
            print('使用方法: sudo', argv[0])
            exit()
        sleep(interval)
        continue

    for dev in devices:
        print("nDevice %s (%s), RSSI=%d dB" % (dev.addr, dev.addrType, dev.rssi))
        isRohmMedal = False
        sensors = dict()
        for (adtype, desc, val) in dev.getScanData():
            print("  %s = %s" % (desc, val))
            if desc == 'Short Local Name' and val[0:10] == 'ROHMMedal2':
                isRohmMedal = True
            if isRohmMedal and desc == 'Manufacturer':

                # 将传感器值代入字典变量sensors
                sensors['ID'] = hex(payval(2,2))
                sensors['Illuminance'] = payval(25,2) / 1.2
                sensors['Battery Level'] = payval(30)
                sensors['RSSI'] = dev.rssi

                # 在画面中显示
                print('    ID            =',sensors['ID'])
                print('    Illuminance   =',round(sensors['Illuminance'],1),'lx')
                print('    Battery Level =',sensors['Battery Level'],'%')
                print('    RSSI          =',sensors['RSSI'],'dB')

                '''
                for key, value in sorted(sensors.items(), key=lambda x:x[0]):
                    print('    ',key,'=',value)
                '''

                illum = sensors['Illuminance']
                if illum < 300:
                    illum_msg = "Dark!"
                    os.system(“sudo hub-ctrl -b 1 -d 2 -P 2 -p 1”)
                else:
                    illum_msg = "Bright"
                    os.system(“sudo hub-ctrl -b 1 -d 2 -P 2 -p 0”)
                print(illum_msg)
                sleep(interval)

通过sudo python3 ble_illum.py运行该程序。

poYBAGPzGyGAcElzAATR13lH_js780.png

我们测试一下,如右侧照片所示,用手遮盖SensorMedal,传感器测得的亮度变暗,USB灯能够获取传感器的值并且很听话地自动开灯!

pYYBAGPzGySAOufjAAFsd4crlTc489.jpg

4. 总结

在这部分中,我们尝试用BLE连接了罗姆SensorMedal和Raspberry Pi。我想大家已经了解到,从远处获取各种传感器数据是非常容易的事。
通过6种传感器,不仅可以检测亮度,还可以获取温湿度、气压和加速度等数据。测量办工桌或房间里的各种数据,可能是件很有趣的事。
在下一部分,我想通过添加人体传感器等器件,让在家办公环境更加舒适。
敬请期待!

审核编辑黄宇

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

    关注

    2573

    文章

    54363

    浏览量

    785811
  • Raspberry Pi
    +关注

    关注

    2

    文章

    621

    浏览量

    23847
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    汽车声学测量趋势洞察(

    在第一部分中,我们探讨了向1/4"传声的转变、电动汽车的低底噪型号以及专为恶劣测试条件而设计的坚固耐用传感器。在第二部分中,我们重点关注
    的头像 发表于 11-04 09:02 121次阅读
    汽车声学测量趋势洞察(<b class='flag-5'>二</b>)

    雷卯针对香橙派Orange Pi 5 Pro开发板防雷防静电方案

    第一部分 应用场景 高端平板、边缘计算、人工智能、云计算、AR/VR、智能安防、智能家居、Linux 桌面计算机、Linux 网络服务、Android 平板、Android 游戏机 第二部分 功能
    的头像 发表于 08-19 17:31 590次阅读
    雷卯针对香橙派Orange <b class='flag-5'>Pi</b> 5 Pro开发板防雷防静电方案

    提高篇——C语言核心技术(中文版)

    严谨的术语表介绍C语言;第二部分描述标准链接库;第三部分介绍GNU软件包中常用的编译和测试工具。 获取完整文档资料可下载附件哦!!!!如果内容有帮助可以关注、点赞、评论支持一下哦~
    发表于 06-13 16:39

    TI大学计划-电源篇

    本手册将分为以下几部分介绍信号链和电源相关的知识及 TI 产品在大学生创新活动中的应用: 第一部分:运算放大器的原理和设计; 第二部分:数据转换的原理和设计; 第三
    发表于 05-19 15:33

    如何用 Raspberry Pi 500 搭建家庭录音室?

    是时候安装并配置家庭录音室中高质量音频制作所需的软件了。这是来自《树莓派官方杂志》系列教程的第三部分,也是最后一部分。若想阅读整个系列教程,请先回顾第一部分(关于录音
    的头像 发表于 05-18 08:33 1211次阅读
    如何用 <b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> 500 搭建家庭录音室?

    测量拉力什么传感器

    传感器。本文将带你从工作原理到实际应用,全面解析这项“拉力感知”技术。   第一部分:拉力测量传感器概述 拉力测量传感器是一种用于测量物体所受拉力的
    的头像 发表于 04-17 16:18 612次阅读

    全面了解ToF传感器:功能、原理与使用--其利天下

    ToF传感器本身由两部分组成;第一部分是发射红外光的极管,第二部分是特殊的光敏矩阵。传感器测量
    的头像 发表于 04-10 12:06 3505次阅读
    全面了解ToF<b class='flag-5'>传感器</b>:功能、原理与使用--其利天下

    松下MPS媒体制作平台 第十一篇:深入探索自动跟踪插件(第二部分)

    MPS媒体制作平台 第十一篇:自动跟踪插件(第二部分) Auto Tracking(自动跟踪)插件是一款基于人体检测和面部识别的高精度跟踪技术精确捕捉四处移动的拍摄对象,从而完成拍摄的
    的头像 发表于 02-19 10:31 892次阅读
    松下MPS媒体<b class='flag-5'>制作</b>平台 第十一篇:深入探索<b class='flag-5'>自动</b>跟踪插件(<b class='flag-5'>第二部分</b>)

    开源项目!基于树莓派制作一个番茄钟机器人!

    5 x1 microSD卡用于Pi x1 Raspberry Pi官方电源 x1 4英寸HDMI电容触摸IPS LCD显示屏 x1 Fermion: ENS160空气质量传感器 x1
    发表于 02-14 11:32

    I2C接口的DAC8571输出不正常是什么原因?

    和SDATA如下图: 首先是一次发送完整波形 然后是第一部分,包括地址与控制字节,是正确的 然后是第二部分,即高位字节 最后是低位字节 可以看到应该是正确的波形。 谢谢!
    发表于 01-17 08:34

    松下MPS媒体制作平台第八篇:视频混合插件(第三部分)

    多种视频素材进行合成。 关于视频混合的操作介绍,我们一共制作了四部分的MPS媒体制作平台教程,本期是第三部分。在进入本
    的头像 发表于 01-08 10:10 935次阅读
    松下MPS媒体<b class='flag-5'>制作</b>平台第八篇:视频混合<b class='flag-5'>器</b>插件(第三<b class='flag-5'>部分</b>)

    视觉AI之旅:一起探索 FiftyOne ——第二部分 入门指南

    /journey-into-visual-ai-exploring-fiftyone-together-part-ii-getting-started-14cca5adfcd3     一,前言 上次我们介绍了《视觉AI之旅:一起探索 FiftyOne——第一部分丨简介丨》,今天作为FiftyOne系列的
    的头像 发表于 12-24 17:00 707次阅读
    视觉AI之旅:一起探索 FiftyOne ——<b class='flag-5'>第二部分</b>  入门指南

    松下MPS媒体制作平台第七篇:视频混合插件(第二部分)

    第七篇:视频混合插件(第二部分) 视频混合(Video Mixer)插件可以轻松进行主体键控,不受拍摄地点的局限,同时便于将多种视频素材进行合成。 关于视频混合的操作介绍,我们一
    的头像 发表于 12-19 13:38 898次阅读
    松下MPS媒体<b class='flag-5'>制作</b>平台第七篇:视频混合<b class='flag-5'>器</b>插件(<b class='flag-5'>第二部分</b>)

    传感器类型在智能家居中的应用

    随着科技的飞速发展,智能家居逐渐成为现代生活的一部分传感器作为智能家居系统中的关键组件,它们能够感知环境变化并提供数据,使得家居设备能够自动响应。本文将介绍不同类型的传感器在智能家居
    的头像 发表于 12-06 14:13 4372次阅读

    树莓派传感器使用方法 树莓派 Raspberry Pi 4优缺点

    树莓派传感器使用方法 树莓派(Raspberry Pi)是一款由英国树莓派基金会开发的小型单板计算机,它因其低成本、易于编程和广泛的社区支持而广受欢迎。树莓派可以与各种传感器配合使用,
    的头像 发表于 12-06 10:35 2785次阅读