如何用DockerPi series SensorHub来远程监控家庭环境参数

DockerPi SensorHub相信已经有很多小伙伴入手了,还没入手的小伙伴可以看看就是下图的样子奥。是不是感觉有超多的功能呢?实际也确实如此。它有检测环境温度,大气湿度,板载温度等功能。通过编写小程序,可以实现很多功能呢。今天我就来教大家通过IOT平台使用它来监控家庭环境的参数。

IOT环境

上篇中已经讲述了如何搭建IOT环境,在这里我就不再赘述了,还不明白的小伙伴可以去看看我们的文章奥。

硬件组装

请断开电源状态下把继电器板子安装到树莓派上,DockerPi板子不支持热插拔

硬件需求

1.RaspberryPi 3B/3B+/4B

2.16GB TF 卡

3. 5V/2.5A电源或者4B的5V/3A电源

4.DockerPi SensorHub

软件环境

1.打开RaspberryPi 的I2C

如何打开树莓派的I2C功能,我相信大家都会操作,我在这里就不再赘述了

2.检查Python3的版本,必须是3.7或以上,是python3的版本奥

python3 –version

3.先安装Azure IOT的环境

pip3 install azure-iot-device

然后git clone Python3的SDK

git clone https://github.com/Azure/azure-iot-sdk-python --depth=1

编写程序

1.首先进入到 azure-iot-sdk-python/tree/master/azure-iot-device/samples/advanced-hub-scenarios目录,打开文件update_twin_reported_properties.py

把con_str的值换成我们在上文提到你自己获取的HostName的值,这个是怎么获取的呢?请看我们的前面的文章是怎么讲述的

同样打开get_twin.py文件然后做相同的操作。

2.然后再次打开 update_twin_reported_properties.py 文件开始加入下图红框里面的代码:

复制出来的格式可能是错的呦,请参考图片的格式添加!

bus = smbus.SMBus(1)
await device_client.connect()
aReceiveBuf = []
aReceiveBuf.append(0x00) # 占位符
for i in range(0x01,0x0D + 1):
    aReceiveBuf.append(bus.read_byte_data(0X17, i))
if aReceiveBuf[0X01] & 0x01 :
    state0 = "Off-chip temperature sensor overrange!"
elif aReceiveBuf[0X01] & 0x02 :
    state0 = "No external temperature sensor!"
else :
    state0 = "Current off-chip sensor temperature = %d Celsius" % aReceiveBuf[0x01]

light = (bus.read_byte_data(0x17,0x03) << 8) | (bus.read_byte_data(0x17,0x02))
temp = bus.read_byte_data(0x17,0x05)
humidity = bus.read_byte_data(0x17,0x06)
temp1 = bus.read_byte_data(0x17,0x08)
pressure = (bus.read_byte_data(0x17,0x0B) << 16) | ((bus.read_byte_data(0x17,0x0A) << 8)) | ((bus.read_byte_data(0x17,0x09)))
    
state = bus.read_byte_data(0x17,0x0C)
if (state == 0):
    state = "the sensor of BMP280 is ok"
else:
    state = "the sensor of BMP280 is bad"
    human = bus.read_byte_data(0x17,0x0D)
if (human == 1):
    human = "live body has been detected"
else:
    human = "no live body"

然后保存运行,如果没有错误的话,你会看到显示图片上的信息:

然后再打开get_twin.py文件,添加如图所示代码:

print("{}".format(twin["reported"]["state0"]))
print("Reported light is: {}".format(twin["reported"]["light"]),"Lux")
print("Reported temperature of board is: {}".format(twin["reported"]["temperature"]),"degC")
print("Reported humidity is: {}".format(twin["reported"]["humidity"]),"%")
print("Reported temperature of sensor is: {}".format(twin["reported"]["temperature1"]),"degC")
print("Reported pressure of air is: {}".format(twin["reported"]["pressure"]),"Pa")
print("Reported {}".format(twin["reported"]["state"]))
print("Reported whether detect live body is: {}".format(twin["reported"]["human"]))

保存以后运行get_twin.py文件,没问题的话,你会看到下面的效果:

Docker Pi系列之智能家居硬件装备

# 现在看电子产品,如果不带点儿智能二字都不好意思出来跟人打招呼~

今天就来给大家安利一款52Pi团队出品的Docker Pi系列产品之智能家居雏形硬件- 4路继电器板, 大家知道继电器的作用是用低电压控制高电压设备。 而这也是制作家庭级别的智能设备的最廉价和最安全的方式之一。

首先给大家看看设备的样子:

Relay DDL 就是继电器叠叠乐的简写

同事比较皮,所以丝印里面有个DDL,就是叠叠乐的简称。

这个能够和树莓派怎么结合在一起呢?

如果只需要控制四路电路开关,就只需要一个叠叠乐就可以搞定了,安装简单到没有朋友,直接扣在树莓派上,用螺丝铜柱锁死就好了,如果有产品洁癖,就可以自行设计一个外壳,将其包裹起来,就更加帅气了,切忌用金属外壳,因为会屏蔽树莓派的wifi信号的哟~

如果觉得一层不够用,我们推荐最多可以堆叠4层,就是所谓的叠叠乐电源控制中心了, 16路继电器每个都有自己独立的地址,通过程序可以精准控制每个继电器的开合。

每个板子上都有一个拨码开关,可以调试继电器的基地址:


四路继电器可以同时控制也可以分开控制就看你怎么去调试拨码开关了。当然为了让大家找到入门的方法,我们专门提供了多种编程语言的支持,C, python, java, shell 也可以。

接驳高压电路的方法:

要注意,由于继电器NC 就是Normal Close 常闭, NO是 Normal Open,常开, Common就是接零线的部分,类似右图, 接线的时候注意关闭总电源,避免触电。切记切记! 安全第一。

上面演示的是一路继电器的接驳方式,想象一下,家里的电箱里面如果有了这个设备,就完全可以在不关闭电箱的情况下轻松通过网络来进行控制了?

接驳好了以后我们看看树莓派上要做些什么吧?

树莓派需要安装Raspbian 系统,并且连入网络,打开ssh服务(sudo raspi-config)

然后利用 i2cdetect -y 1 检查当前设备的基地址: 一般是0x10

如果你的树莓派没有这条命令,也不要慌:

sudo apt-get update 
sudo apt-get -y install i2c-tools

通过上面的命令就可以安装i2c工具组件,就可以检测了。
然后我们就可以通过命令行输入:
i2cset -y 1 0x10  0x01  0xff
来打开第一个继电器了。
这里解释一下: -y 1 是定义i2c总线,意思是:bus 1 
0x10 是基地址就是设备在树莓派上识别出来的地址。
0x01 是第一个继电器,0x02 , 0x03, 0x04 就分别是第二个继电器,第三个,第四个。。
0xff 是开启继电器,相反,0x00 就是关闭继电器。 

如果你写个shell脚本:


然后执行, chmod +x relay.sh && ./relay.sh

就会发现四个继电器来回开合,当然我建议继电器的开关不要这么玩儿,实际上我们不会让大家这样开灯关灯折磨它对吗?我们需要它更智能一些,例如,当房间温度超过25°的时候,打开风扇的开关,自动来完成,就可以将风扇的电缆接入继电器,然后再找一个DHT11的温湿度传感器,用程序读取温度信息,然后做判断,当温度大于25°就执行 i2cset -y 1 0x10 0x01 0xff这样的命令。。

当然,树莓派可以支持的语言非常多,大家可以用自己熟悉的语言来做开发。

例如:用C:

编译执行:

gcc relay.c -lwiringPi -o relay && ./relay

或者是python, 当然使用python的时候要注意安装一个库:

sudo pip3 install smbus2

执行:

chmod +x relay.py 
./relay.py 

如果侥幸你还有腾讯云,阿里云,或者机智云的云平台,那么更加棒的事情就是通过这些云平台来对你的设备进行控制,将树莓派接入云平台请访问我们的公众号,获取最新的一期推送,就可以看到详细福利了,这里我就不赘述了!

听说有人要用这个板子接四路激光头,让家里的喵星人活动活动筋骨, 有人要用这个板子来控制家里鱼缸的灯光,加温棒和加氧泵, 还有人要用来控制教室里面的日光灯管,节约能源, 甚至还有人想用来给家里的4块移动硬盘做电源开关, 脑洞真是无限大~

欢迎大家前往52pi.taobao.com进行咨询和选购。 期待大家更好的玩儿法!

用树莓派和宜家台灯玩转AR投影黑科技

MAKER:Nord Projects/译:趣无尽 Cherry(转载请注明出处)
这是一款用树莓派(Raspberry Pi)和宜家台灯制作的智能家具,应用 Android Things 系统来实现 AR(增强现实)投影灯。
Nord Projects 表示我们已经制作了一些类似的 AR 智能家具的项目,如:投影给时钟显示约会标记、投影给扬声器显示当前正在播放的歌曲。
在不久的未来,将使用投影来呈现环境信息,以及日常物体中的相关用户界面。与屏幕不同,当台灯的投影不再需要时,它们就会慢慢消失。
这是一个非常明晰的教程,用照片和GIF很好地加以说明。这个项目不需要大量的实践经验,你只需要3D打印出所有组件,将所有的东西组合在一起即可,因为一切都是开源的,感兴趣的趣友们动手试试看吧:)

项目将使用宜家的灯具、激光投影仪和Android things创建一个互联的投影仪。通过配套的应用程序设置迷你的应用程序,在线连接数据反馈并显示预计的用户界面。
改造的核心是Android Things,一款来自Google的新操作系统,专为嵌入式设备和物联网而设计。 Android Things更容易实现软件与设备的连接,尤其是对于已经熟悉Android的移动开发人员!

台灯投影仪使用宜家的Tertial灯现成部件,3D打印附件和我们的开源软件。
如果你以前没有使用过Android的东西也不必担心。 我们将引导你完成这一过程,以便立即启动并运行这个项目。

所需材料

  • 宜家 Tertial 台灯 x1
  • 10mm x 2m编织电缆护套x1
  • 电缆扎带x4
  • M2 x 4mm自攻螺丝钉x6
  • M2.2 x 8mm自攻螺丝钉x3
  • M3 x 20mm自攻螺丝钉x5
  • M48mm翼形螺丝钉x2
  • M410mm螺丝钉x2
  • UO智能光束投影仪x1
  • Raspberry Pi 3 B型x1
  • Raspberry Pi V2相机(可选)x1
  • ADXL345加速传感器x1
  • 母对母跳线(75mm)x4
  • MicroSD卡(大于2GB)x1
  • 直角microHDMI转HDMI高清线 x1
  • 直角(下弯)microUSB延长线x2
  • Micro-USB电源线 6英尺(约183mm)x2
  • 双端口USB电源适配器x1

所需工具

  • 螺丝刀(十字头,型号PH1,PH0)
  • Rasp文件(+副选项)
  • 量角器或数码角度标尺 x1
  • 磨砂纸(80砂砾) x1
  • 烙铁+焊料(刀头可选)
  • 剪切工具(用于切割灯丝,电缆扎带) x1
  • 内六角扳手4(用于灯头平头螺丝+插入尺寸4) x1
  • 类似锥子或螺丝刀这样可以取下灯泡罩的小尖头物品 x1

步骤1:台灯内部的准备工作

1、将电源线从灯中取出
松开灯架侧面的螺丝,然后切断灯头附近的电源线,通过金属手臂将电源线拉出。
2、拆下灯泡附件
使用六角扳手,卸下固定电缆的螺丝。在灯头的侧面插入一把小螺丝刀。 轻轻撬起塑料卡舌以松开插座。 (把它弄松可能有点棘手。)将灯头转过来并取下固定插座的塑料螺丝。 你现在可以取下灯泡附件了。
3、修改灯臂
从手臂上拧下灯头,然后取下塑料夹。将手臂接口的直角磨成到半圆形。
4、夹住灯头
从手臂上拧下灯头。 从金属延伸件上取下所有部件。将金属夹的边缘磨平,使它们均匀平滑。
5、处理塑料垫片
取出从金属附件的塑料垫片。 使用砂纸将其两端磨成约4.5mm厚。处理后的塑料片可以更好地固定金属部件,防止头部随着长时间的使用而滑落。
6、拧紧螺丝
拧紧灯上的所有螺丝钉,使它可以很好地移动。

步骤2:3D打印附件

1、测量灯的角度
每个灯都会不同,所以需要调整CAD模型。 使用量角器或数码角度尺,测量凹槽和灯臂之间的角度。
2、获取CAD
在OnShape中打开CAD模型(开源项目免费使用)。 这是一份公开文件,所以请复印一份供你调整。
3、调整CAD
点击标题为’EDIT THIS – arm pilot holes’的草图。选择上面标有显示的测量值并将数值更改为步骤1中测量的角度。输入后将相应的旋转相关特征。
4、导出你的模型
三个部分中的每一个,右键单击附件名称并导出。 使用以下设置:
格式:STL

  • STL格式:二进制
  • 单位:毫米
  • 分辨率:良好
  • 选项:下载

5、3D打印

使用3D打印机打印文件。我们使用了Ultimaker 2+,但你可以随意使用任何型号的3D打印机。
我们的Ultimaker 2+设置:

  • 材料:PLA
  • 喷嘴:0.4毫米

使用默认设置,微调:

  • 增加10mm的边缘
  • 第一层的喷嘴温度为200°C
  • 剩下部分的喷嘴温度为210°C
  • 打印顶部部件(顶盖和手臂)时,壁厚度设置为3毫米。

步骤3:组装硬件

1、焊接加速度传感器
将一行的9个针头引脚焊接到加速传感器上。确保它们延伸出电路板的正面。
2、嵌入投影机
将投影机按入底座;使它安置妥当。将微型HDMI电缆插入投影机。
3、组装手臂和盖子
使用2 x 20毫米M3螺丝钉将3D打印的手臂连接到配套的盖子上。小心地将手臂的底座与盖子上的定位器对齐。
4、螺纹固定插件
使用六角扳手,将10mm M4螺纹插件拧入臂顶部的两个孔中,直至它们与表面齐平。
5、连接跳线
使用跳线将加速度传感器与Raspberry Pi上的I2C总线连接。务必慢慢来,确保这两个组件安装到的正确引脚上!
6、安装相机(可选)
提起相机连接器上的夹子并插入带状电缆。将夹子向下推,将其固定到位。将相机安装到位。
7、连接树莓派
将Raspberry Pi移动到位并用3个8mm M2.2螺丝固定。
8、连接加速度传感器
使用2个M24毫米螺丝将加速传感器连接到底座。
9、连接盖子和手臂
使用3个20毫米M3螺丝将盖子和手臂连接到底座。
10、HDMI高清线
将HDMI高清线插入Raspberry Pi。

步骤4:接线

1、切割护套
将编织电缆护套切成166CM长。我们建议在烙铁上使用刀具附件以防止电缆护套散开。
2、穿线套
将两根USB电缆穿过编织电缆护套。
3、将电缆传入灯罩内
将Micro-USB电缆的两端插入灯头后部。
4、直角连接器
将电缆穿过3D印刷臂的侧面。 连接直角Micro-USB延长线。 插入USB电源适配器。

步骤5:设置软件

1、 获取Android Things
准备好你的microSD卡,并按照以下步骤操作https://developer.android.com/things/hardware/raspberrypi.html#flashing_the_image 刷新SD卡上的Android Things。
2、启动Android Things
将microSD插入Pi并连接USB电源。
3、设置WiFi
运行“android-things-setup-utility”。出现提示时,选择“2 – 在现有Android Things设备上设置Wifi”,然后选择“1 – Raspberry Pi 3”。接下来,通过网络将Raspberry Pi连接到你的计算机(或路由器),然后按“Enter”键。按照屏幕提示设置WiFi。现在你可以拔掉Raspberry Pi。
4、安装并运行代码

从GitHub下载代码并在Android Studio中打开它。一旦Gradle同步,打开一个终端窗口并输入:
adb连接android.local
然后选择‘things’设置按绿色键为上传并运行代码。
如果获取错误?请查看我们的故障排除指南。

5、给投影机供电
将Micro-USB插入投影机并打开电源。检查显示器,如果以错误的屏幕分辨率启动,灯会自动重启,因此你可能需要等待完成。当你看到启动画面时,你完成了,太棒了!
如遇到问题?请查看我们的故障排除指南

步骤6:组合在一起

1、连接硬件
将组装好的硬件插入灯头。务必检查摄像头和投影机是否垂直对齐。
2、拇指固定螺钉
一旦排好后,用手指固定螺丝。
3、电缆扎带
用小电缆扎带将电缆固定到位。在灯头附近留出足够的余量以便将硬件装入和取出。

步骤7:下一步会是什么?

在手机上安装相应的应用程序(使用Android Studio)并使它与台灯连接。
向下、向前或向上移动台灯,投影画面在默认通道之间切换。
通过点击手机页面上的方向选择来改变频道。
最后下一步
定制你的专属台灯 – 混合搭配宜家灯具部件或喷涂你自己的灯具。按照本指南制作自己的频道。以下是我们想到的一些事情:

  • 桌面上下载你喜欢的新闻软件APP,或者你的WeChat
  • 一个用来逗猫的光点
  • 使用网络摄像头和计算机摄像头用作你的台灯的相机投影系统
  • 尝试处理Android Things

故障排除指南

adb connect android.local返回错误
可能是你的网络无法解析该名称,或者您的设备未连接到WiFi。 打开投影机并查看Android Things Launcher – 它会告诉你本地网络上的IP地址。
如果列出了IP地址,请在终端中输入adb connect <your-device-ip>
如果这不起作用,或者你的设备没有IP地址,那么你的WiFi网络可能不支持此类设备。 尝试再次配置WiFi,如果可能的话,连接到不同的网络。

源代码

所有源码均可在 GitHub 下载,包括用于 Android Things 的源码、运行投影仪和 Android Mobile 相关 APP 源码。
GitHub:https://github.com/nordprojects/lantern
项目主页:http://nordprojects.co/lantern
MAKER 趣无尽页面:http://maker.quwj.com/project/54

使用树莓派构建一个婴儿监视器

香港很湿热,即便是晚上,许多人为了更舒适,在家里也使用空调。当我的大儿子还是一个小婴儿的时候,他卧室的空调还是需要手动控制的,没有温度自动调节的功能。它的控制器只有开或者关,让空调整个晚上持续运行会导致房间过冷,并且也浪费能源和钱。

我决定使用一个基于树莓派的物联网解决方案去修复这个问题。后来我进一步为它添加了一个婴儿监视器插件。在这篇文章中,我将解释我是如何做的,它的代码在 我的 GitHub 页面上。

设计空调控制器

解决我的问题的第一个部分是使用了一个 Orvibo S20 可通过 WiFi 连接的智能插头和智能手机应用程序。虽然这样可以让我通过远程来控制空调,但是它还是手动处理的,而我希望尝试让它自动化。我在 Instructables 上找到了一个满足我的需求的项目:他使用树莓派从一个AM2302 传感器上测量附近的温度和湿度,并将它们记录到一个 MySQL 数据库中。

使用压接头将温度/湿度传感器连接到树莓派的相应 GPIO 针脚上。幸运的是,AM2302 传感器有一个用于读取的 开源软件,并且同时提供了 Python 示例。

与我的项目放在一起的用于 AM2302 传感器 接口的软件已经更新了,并且我使用的原始代码现在应该已经过时了,停止维护了。这个代码是由一个小的二进制组成,用于连接到传感器以及解释读取并返回正确值的 Python 脚本。

将传感器连接到树莓派,这些 Python 代码能够正确地返回温度和湿度读数。将 Python 连接到 MySQL 数据库很简单,并且也有大量的使用 python-mysql 绑定的代码示例。因为我需要持续地监视温度和湿度,所以我写软件来实现这些。

事实上,最终我用了两个解决方案,一是作为一个持续运行的进程,周期性(一般是间隔一分钟)地获取传感器数据,另一种是让 Python 脚本运行一次然后退出。我决定使用第二种方法,并使用 cron 去每分钟调用一次这个脚本。之所以选择这种方法的主要原因是,(通过循环实现的)持续的脚本偶尔会不返回读数,这将导致尝试读取传感器的进程出现堆积,最终可能会导致系统挂起而缺乏可用资源。

我也找到了可以用程序来控制我的智能插头的一个 Perl 脚本。它是解决这种问题所需的一部分,因此当某些温度/湿度达到触发条件,将触发这个 Perl 脚本。在做了一些测试之后,我决定去设计一个独立的 checking 脚本,从 MySQL 去拉取最新的数据,然后根据返回的值去设置智能开关为开或关。将插头控制逻辑与传感器读取脚本分开,意味着它们是各自独立运行的,就算是传感器读取脚本写的有问题也没事。

配置一个打开/关闭空调的温度值是很有意义的,因此,我将这些值转移到控制脚本读取的配置文件中。我也发现,虽然传感器的值一般都很准确,但是,偶尔也会出现返回不正确读数的情况。这个传感器脚本被修改为不向 MySQL 数据库中写入与前值差异非常大的值。同样也在配置文件中写入了连续读取的温度/湿度之间允许的最大差异值,如果读取的值处于这些限制值以外,这些值写不会提交到数据库中。

虽然,做这个自动调节器似乎花费了很多努力,但是,这意味着,记录到 MySQL 数据库的数据是有效的、可用于进一步去分析识别用户使用模式的有用数据。可以用多种图形方式去展示来自 MySQL 数据库中的数据,而我决定使用 Google Chart 在一个 Web 页面上显示数据。

添加一个婴儿监视摄像头

树莓派开放的性能意味着我可以不断地为它增加功能 —— 并且我有大量的未使用的可用 GPIO 针脚。我的下一个创意是去添加一个摄像头模块,将它放在孩子的卧室中,配置它去监视婴儿。

我需要一个能够在黑暗环境中工作的摄像头,而 Pi Noir 摄像头模块是非常适合这种条件的。Pi Noir 除了没有红外过滤之外,同样也是树莓派常用的摄像头模块。这意味着它在白天时的图像可能有点偏紫色,但是它可以在黑暗中借助红外灯来显示图像。

现在我需要一个红外光源。由于树莓派非常流行,并且进入门槛很低,因此它有大量的外围配件和插件。也有适合它的各种红外光源,我注意到的其中一个是 Bright Pi。它可以从树莓派上供电,并且它很适合为树莓派的摄像头模块提供红外光和普通光。它唯一的缺点是太考验我的焊接技能了。

我的焊接技能还是不错的,但是可能花费的时间比其他人更长。我成功地连接了外壳上所有的红外 LEDs,并将它们连接到树莓派的 GPIO 针脚上。这意味着树莓派能够编程控制红外 LED 是否点亮,以及它的亮度。

通过一个 Web 流去公开捕获的视频也很有意义,因为这样我就可以从 Web 页面上查看温度和湿度的读数图表。进一步研究之后,我选择了一个使用 M-JPEG 捕获器的 流软件。通过 Web 页面公开 JPG 源,我可以在我的智能手机上去连接摄像头查看程序,去查看摄像头的输出。

做最后的修饰

没有哪个树莓派项目都已经完成了还没有为它选择一个合适的外壳,并且它有各种零件。在大量搜索和比较之后,有了一个显然的 赢家:SmartPi 的乐高积木式外壳。乐高的兼容性可以让我去安装温度/湿度传感器和摄像头。下面是最终的成果图:

在这以后,我对我的这个作品作了一些改变和更新:

  • 我将它从树莓派 2 Model B 升级到了树莓派 3,这意味着我可以使用 USB WiFi 模块。
  • 我用一个 TP-Link HS110 智能插头替换了 Orvibo S20。
  • 我也将树莓派插到了一个智能插头上,这样我就可以远程重启/重置它了。
  • 我从树莓派上将 MySQL 数据库移走了,它现在运行在一个 NAS 设备上的容器中。
  • 我增加了一个非常 灵活的三角夹,这样我就可以调整到最佳角度。
  • 我重新编译了 USB WiFi 模块,禁用了板载 LED 指示灯,这就是升级到树莓派 3 的其中一个好处。
  • 我因此为我的第二个孩子设计了另外一个监视器。
  • 因为没有时间去折腾,我为我的第三个孩子购买了夜用摄像头。

想学习更多的东西吗?所有的代码都在 我的 GitHub 页面上。

想分享你的树莓派项目吗?将你的故事和创意发送给我们。

via: https://opensource.com/article/18/3/build-baby-monitor-raspberry-pi
作者:Jonathan Ervine 译者:qhwdw 校对:wxy
本文由 LCTT 原创编译,Linux中国 荣誉推出

这个人改造了自己的桌子,让自己的 Google Home 用上 “实体专辑”

相信,还在买 CD 或者黑胶的用户其实还有不少。

爱范儿(微信号:ifanr)在之前谈黑胶的时候就已经提到,现在有不少年轻用户还会追黑胶唱片。他们的着眼点并不在体验传统的味道上,而是觉得收集黑胶或者其他实体专辑是一种支持歌手出唱片或提升“仪式感”的行为。

 

虽然不怎么听,但买起来也不会少。

确实,现在要听个实体专辑确实也不容易。黑胶的话经不起折腾,听 CD 也不方便。而且现在的人已经习惯了那种以单曲、EP 为主的音乐消费模式,很少人能够坚持把一张专辑完完整整听完的。

OLYMPUS DIGITAL CAMERA

所以在声音体验也没有差太多的前提下,与其去不断切歌、换碟,倒不如直接用流媒体来得方便。

但其实,现在有人还想去玩“实体专辑”。GitHub 上有一位用户,就通过树莓派做了一个识别感应器,让自家的 Google Home 用上“实体专辑”。

 

根据 The Verge 的报道,这位来自 GitHub 上的用户叫“hoveeman”,他将一个射频识别读卡机和树莓派 Raspberry Pi Zero 连接起来,并开发了一套专用的程序。安装上这套程序后,树莓派能够给家中的 Google Home 发出指令,让它播放相应的专辑。

在这套组合中,射频识别读卡器 RFID 模块的任务就是用来识别“实体专辑”。

这些“实体专辑”,其实是 hoveeman 自己做的一些小卡片。小卡片的表面印着专辑封面、名称和表演者,卡片内部则呆在了一块小型识别芯片。当用户将芯片放到 RFID 模块上,模块就能够识别出相应的信息,传输到 Raspberry Pi Zero 上。电脑处理后,就会发送的 Google Home 上,让它播放相应的专辑。

这个模块能够隐藏在家居产品当中,不管是木桌还是凳子,只要不阻碍 RFID 识别的,都能够藏在里面。虽然这套设备带来的解决方案有点“多此一举”,但现在看起来有点意思。至少,它比你经常换 CD 来得方便。

现在,Hoveeman 将这套解决方案都上传到 GitHub 上。你可以在这个主页上查到它用过的设备和代码,自己做一套相同的出来。

(Hoveeman 整套方案的内容物)

这个其实有点像之前在那个用 RFID 来控制 Spotify 的方案,那个方案也是用识别卡片来让智能设备播放 Spotify 中的专辑或特定播放列表,做法和实现目标基本上没有什么大分别。

这些方案对于开发者来说,也都是自娱自乐的东西而已。

毕竟,现在的人确实也不怎么喜爱这种消费方式。他们只需要一个简单的听歌方案,而流媒体服务正好能够给他们最简单直接的体验,有这个来确保基本需求之后,其他东西也不重要。

 

使用MQTT连接树莓派IoT设备

有时候,你可能会发现自己处于一种你想让设备通过互联网相互通信的情况。例如,当我到另一个城市旅行的时候,我意识到我忘了关掉我房间的灯光。在这种情况下,我希望有一个Android应用程序或一个网站,我可以监视我家的灯光状态,并能打开或关闭它们。

所以,假设你想在一个可以在世界任何地方操作的房间里连接一个电灯开关。一个快速而稳定的选项是使用MQTT。

什么是MQTT?

MQTT(消息队列遥测传输)是一种轻量级消息传递协议,非常适用于物联网连接设备的通信。

MQTT有三个组件:代理,发布者和订阅者。经纪人是处理设备之间进行通信的中介实体。发布者是发送消息的设备。订阅者收听发布者发送的消息。

在MQTT中还有一件更重要的事情,那就是一个话题。不同设备之间的通信需要一个主题。例如,设备A想要向设备B发送消息。为此,两者之间应该有一些共同之处,那就是主题。把它想象成一个电话号码。

CloudMQTT

CloudMQTT是为特定数量的设备提供免费MQTT通信的代理服务。

设置MQTT

  • 在“名称”字段中输入CMQTT

  • 点击创建
  • 记下您的数据,如下图所示

 

 

  • 在同一页面上,在管理用户中添加一个用户:
    • 名字:pi
    • 密码:pi

 

  • 点击“保存”
  • 再次在最后的同一页上:
    • 用户:pi
    • 主题:pi

 

  • 并点击“保存”
  • 现在,在顶部的栏中,点击“WebSocket UI”

 

 

  • 你会看到一个页面,所有的传感器数据将被显示
  • 将以下代码上传到Arduino

下面的代码是用虚拟字符串代替传感器的示例代码。您可以用来自传感器的值替换字符串。

String sensorsData=""; 
String randSensorsData=""; 
void setup() {
   // put your setup code here, to run once: 
Serial.begin(9600); 
pinMode(A0,INPUT);//temperature sensor 
pinMode(A1,INPUT);//windspeed sensor 
pinMode(A2,INPUT);//wind direction sensor 
pinMode(A3,INPUT);//rain fall sensor 
pinMode(A4,INPUT);///barometric pressure sensor
} 

void loop() {
   // put your main code here, to run repeatedly:      
sensorsData=String("-")+String("S1=")+String(analogRead(A0))+String(",")+String("S2=")+String(analogRead(A1))+ \
String(",")+String("S3=")+String(analogRead(A2))+String(",")+String("S4=")+  \
String(analogRead(A3))+String(",")+String("S5=")+String(analogRead(A4))+String("+");     
randSensorsData=String("-")+String("S1=")+String(random(100))+String(",")+String("S2=")+ \
String(random(200))+String(",")+String("S3=")+String(random(125))+String(",")+String("S4=")+\
String(random(500))+String(",")+String("S5=")+String(random(50))+String("+");     
   Serial.println(sensorsData);     
   Serial.println(randSensorsData);   
   delay(200); 
}

此代码使用Arduino的模拟引脚来获取传感器的值,并传递到Raspberry Pi进行处理和MQTT通信。上面的代码使用随机函数来生成随机值来模拟模拟引脚。

  • 传感器应连接到A0,A1,A2,A3,A4引脚,
  • Serial.println(randSensorsData);
  • 这一行发送随机数据来检查服务器。
  • 您也可以检查在WebSocket UI中显示的随机数据。
  • 打开python 2.7并在其中编写下面的代码:
import paho.mqtt.client as mqtt
import time
data=”Hello from Raspberry Pi!”
while True:
    print(data)
    try:
        client=mqtt.Client()
        client.username_pw_set("yoyojacky","MyRPiPr0J")#替换成你的用户名和密码
        client.connect("m13.cloudmqtt.com",13017,60)
        client.publish("pi",data) #这里的 pi 是你的话题,客户端就订阅这个话题
        time.sleep(1)
    except KeyboardInterrupt:
        print("end")
        client.disconnect()
  • 现在使用python 2.7运行代码
  • 您将在每秒钟后看到传感器数据显示在CloudMQTT的WebScoket UI中。

  • 在这里,您将看到从Raspberry Pi发送的数据。

令人惊讶的是,CloudMQTT提供了一个完整的dashboard用于测试目的。您可以使用此dashboard订阅或发布主题.

在接下来就可以去配置你的 arduino 和树莓派来管理家里的设备或者查询家里的设备信息了!