大家好,我是吉田!
我们这次要创作一款让家中更舒适、让在家办公更高效的设备,本文是第二部分。第一部分介绍了制作纲要和所需部件。这次我们将实际连接Bluetooth传感器和Raspberry Pi。使用罗姆SensorMedal,您甚至可以远程轻松地将传感器值共享给Raspberry Pi!
本部分所需部件
Raspberry Pi 3 B+ 或 Raspberry Pi 4 Model B
Raspberry Pi 3 B+
Raspberry Pi 4 Model B
罗姆SensorMedal(SensorMedal-EVK-002)
手机电池
USB设备
使用100日元商店就能买到的USB迷你灯和迷你风扇等物件
本部分的流程
罗姆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的电源,并将它们放在附近。
通过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传来的测量值。
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端口。
安装一个库来控制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
这是指定“-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运行该程序。
我们测试一下,如右侧照片所示,用手遮盖SensorMedal,传感器测得的亮度变暗,USB灯能够获取传感器的值并且很听话地自动开灯!
4. 总结
在这部分中,我们尝试用BLE连接了罗姆SensorMedal和Raspberry Pi。我想大家已经了解到,从远处获取各种传感器数据是非常容易的事。
通过6种传感器,不仅可以检测亮度,还可以获取温湿度、气压和加速度等数据。测量办工桌或房间里的各种数据,可能是件很有趣的事。
在下一部分,我想通过添加人体传感器等器件,让在家办公环境更加舒适。
敬请期待!
审核编辑黄宇
-
传感器
+关注
关注
2561文章
52363浏览量
762650 -
Raspberry Pi
+关注
关注
2文章
616浏览量
22841
发布评论请先 登录
测量拉力用什么传感器
松下MPS媒体制作平台 第十一篇:深入探索自动跟踪插件(第二部分)

开源项目!基于树莓派制作一个番茄钟机器人!
I2C接口的DAC8571输出不正常是什么原因?
视觉AI之旅:一起探索 FiftyOne ——第二部分 入门指南

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

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

Air780EP硬件设计原理解析(第二部分)

Banana Pi M5 与 Raspberry Pi 4 – 基准测试

0.4mm层叠封装(PoP)封装的PCB组装指南,第二部分

求助,opa695的datesheet问题求解
使用rt_thread_mdelay函数后出现hardfault的原因?

射频干簧继电器的产品特性、优势及解决的痛点
长期以来,干簧继电器以其在切换和传输射频信号以及快速数字脉冲方面的出色性能而备受认可。然而,由于干簧管的引线通常由镍铁合金制成,这种材料的磁导率(µ)相对较高,因此人们普遍认为干簧继电器难以实现高达20GHz的射频信号切换与传输。如今,斯丹麦德电子成功突破了这一技术瓶颈。射频干簧继电器特性和优势产品特性高频应用限制:突破传统材料的限制,实现高达20GHz的高

TurMass™ 传输技术:赋能输变电物联网监测的核心引擎
随着新型电力系统建设持续推进,TurMass™ 技术凭借穿透性强、抗干扰优、安全性高等特点,已在变电站设备监测、山区线路防护、输电线路远程巡检等多个场景形成成熟的应用方案。其"精准感知、可靠传输、智能管控"的技术特性,正成为推动电网设备数字化改造的关键通信基座,为构建本质安全的智能输变电体系提供了可复制的技术路径。

ElfBoard技术实战|ELF 2开发板本地部署DeepSeek大模型的完整指南
ELF 2开发板本地部署DeepSeek大模型的完整指南

【H桥电机驱动电路原理】-学习笔记
工作原理电路分析这是一个由晶体管构成的H桥电机驱动电路,以下是对其各部分的介绍:核心器件晶体管:电路中使用了PNP型的SS8550(Q5、Q6)和NPN型的SS8050(Q9、Q10、Q13、Q14)。通过不同晶体管的导通与截止组合,实现电机两端电压极性的切换,进而控制电机正反转。比如,当Q5和Q10导通,Q6和Q9截止时,电流从MotorL+流入电机,从M

ATA-2041高压放大器在CFRP板分层缺陷的空耦超声原位测量中的应用
前言空气耦合超声波技术,作为一种高效且无损的检测方法,近年来在工业领域受到了广泛关注。其独特之处在于利用空气作为耦合介质,无需与被测物体直接接触,即可实现高精度的检测与成像。它能够检测在用CFRP板中的缺陷确保其应用安全,但传统的空气耦合超声方法通常依赖于线性缺陷指数在表征小尺寸缺陷方面无效。此外扫描步长完全限制了它们的成像空间分辨率,导致成像空间分辨率与检

TwinCAT3 EtherCAT抓包 | 技术集结
在使用TwinCAT测试EtherCATEOE功能时,我们会发现正常是无法使用Wireshark去进行网络抓包抓取EtherCAT报文的,今天这篇文章就带大家来上手EtherCAT抓包方式。准备环境硬件环境:EtherKit开发板网线一根Type-CUSB线一根软件环境TwinCAT3RT-ThreadstudiowiresharkEtherCATEOE工程

EtherCAT科普系列(8):EtherCAT技术在机器视觉领域的应用
机器视觉是基于软件与硬件的组合,通过光学装置和非接触式的传感器自动地接受一个真实物体的图像,并利用软件算法处理图像以获得所需信息或用于控制机器人运动的装置。机器视觉可以赋予机器人及自动化设备获取外界信息并认知处理的能力。机器视觉系统内包含光学成像系统,可以作为自动化设备的视觉器官实现信息的输入,并借助视觉控制器代替人脑实现信息的处理与输出。从而实现赋予自动化

新品 | 26+6TOPS强悍算力!飞凌嵌入式FCU3501嵌入式控制单元发布
飞凌嵌入式FCU3501嵌入式控制单元基于瑞芯微RK3588处理器开发设计,4xCortex-A76+4xCortex-A55架构,A76主频高达2.4GHz,A55核主频高达1.8GHz,支持8K编解码,NPU算力6TOPS,支持算力卡拓展,可以插装Hailo-8 26TOPS M.2算力卡。

接口核心板必选 | 视美泰AIoT-3568SC 、 AIoT-3576SC:小身材大能量,轻松应对多场景设备扩展需求!
在智能硬件领域,「适配」是绕不开的关键词。无论是小屏设备的”寸土寸金”,还是模具开发的巨额成本,亦或是多产品线兼容的复杂需求,开发者总在寻找一款能「以不变应万变」的核心解决方案。视美泰旗下的AIoT-3568SC与AIoT-3576SC接口核心板系列,可以说是专为高灵活适配场景而生!无需为设备尺寸、模具限制或产品线差异妥协,一块核心板,即可释放无限可能。为什

3核A7+单核M0多核异构,米尔全新低功耗RK3506核心板发布
近日,米尔电子发布MYC-YR3506核心板和开发板,基于国产新一代入门级工业处理器瑞芯微RK3506,这款芯片采用三核Cortex-A7+单核Cortex-M0多核异构设计,不仅拥有丰富的工业接口、低功耗设计,还具备低延时和高实时性的特点。核心板提供RK3506B/RK3506J、商业级/工业级、512MB/256MBLPDDR3L、8GBeMMC/256

搭建树莓派网络监控系统:顶级工具与技术终极指南!
树莓派网络监控系统是一种经济高效且功能多样的解决方案,可用于监控网络性能、流量及整体运行状况。借助树莓派,我们可以搭建一个网络监控系统,实时洞察网络活动,从而帮助识别问题、优化性能并确保网络安全。安装树莓派网络监控系统有诸多益处。树莓派具备以太网接口,还内置了Wi-Fi功能,拥有足够的计算能力和内存,能够在Linux或Windows系统上运行。因此,那些为L

STM32驱动SD NAND(贴片式SD卡)全测试:GSR手环生物数据存储的擦写寿命与速度实测
在智能皮电手环及数据存储技术不断迭代的当下,主控 MCU STM32H750 与存储 SD NAND MKDV4GIL-AST 的强强联合,正引领行业进入全新发展阶段。二者凭借低功耗、高速读写与卓越稳定性的深度融合,以及高容量低成本的突出优势,成为大规模生产场景下极具竞争力的数据存储解决方案。

芯对话 | CBM16AD125Q这款ADC如何让我的性能翻倍?
综述在当今数字化时代,模数转换器(ADC)作为连接模拟世界与数字系统的关键桥梁,其技术发展对众多行业有着深远影响。从通信领域追求更高的数据传输速率与质量,到医疗影像领域渴望更精准的疾病诊断,再到工业控制领域需要适应复杂恶劣环境的稳定信号处理,ADC的性能提升成为推动这些行业进步的重要因素。行业现状分析在通信行业,5G乃至未来6G的发展,对基站信号处理提出了极

史上最全面解析:开关电源各功能电路
01开关电源的电路组成开关电源的主要电路是由输入电磁干扰滤波器(EMI)、整流滤波电路、功率变换电路、PWM控制器电路、输出整流滤波电路组成。辅助电路有输入过欠压保护电路、输出过欠压保护电路、输出过流保护电路、输出短路保护电路等。开关电源的电路组成方框图如下:02输入电路的原理及常见电路1AC输入整流滤波电路原理①防雷电路:当有雷击,产生高压经电网导入电源时

有几种电平转换电路,适用于不同的场景
一.起因一般在消费电路的元器件之间,不同的器件IO的电压是不同的,常规的有5V,3.3V,1.8V等。当器件的IO电压一样的时候,比如都是5V,都是3.3V,那么其之间可以直接通讯,比如拉中断,I2Cdata/clk脚双方直接通讯等。当器件的IO电压不一样的时候,就需要进行电平转换,不然无法实现高低电平的变化。二.电平转换电路常见的有几种电平转换电路,适用于
评论