如何用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文件,没问题的话,你会看到下面的效果:

树莓派4B 更新wiringPi库到2.52的方法

最新发布的树莓派4B在烧录了官方系统buster以后,如果直接使用gpio readall去查看GPIO会出现错误。无法识别的情况,需要根据以下步骤进行wiringPi的更新:

登陆后打开一个终端输入:

cd /tmp
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb

然后再使用

gpio -v

检查版本信息,确保版本为:2.52即可。

然后再执行:gpio readall

这时候就可以继续像往常那样使用GPIO的引脚进行编程了。

我们尝试一下使用gpio 引脚点亮一个LED灯。LED灯接在物理引脚12号,名称GPIO.1 针对WPi 引脚为1, BCM引脚为18号。

编写一个C源码:led.c

调用gcc编译:

gcc -o led -lwiringPi led.c

执行:

./led

终端显示:

由于手头的电阻阻值比较大,效果不明显,所以去掉了电阻,实际上大家应该加个220欧姆的电阻来保护LED。

兼容树莓派4B的好产品

最近树莓派4B像一颗重磅炸弹投入了平静的湖面, 一石激起千层浪的感觉,树莓派4B以其大内存,双4k60fps的HMDI,千兆网卡,usb3.0 , 蓝牙5.0 BLE的强大特性让很多小伙伴趋之若鹜。

大部分的朋友还在疯狂测试性能,做评测的时候,我们的NightLight板和4路继电器板已经可以完美兼容树莓派4B的主板了!

给大家看看这些产品的样子:


这个小夜灯的灯板制作非常精美,通过GPIO引脚进行控制,代码非常简单,并且随机赠送的亚克力板也可以进行自行DIY,12颗高品质ws2812灯珠光线耀眼,通过程序控制RGB三种颜色的变化随心所欲,由于结合了树莓派,还可以联网进行远程控制,如果熟悉阿里云,腾讯云,百度云这些云平台的小伙伴们,就更加得心应手了,可以完美打造自己的IoT应用。
再看看4路继电器板:




这款继电器板既能够支持堆叠,又能够像Nightlight板一样接入云平台,高精度的继电器模块是你智能家居的好伙伴,同样也是能够无缝支持树莓派4B主板,通过I2C即可进行控制,如果堆叠4层继电器板就可以管理16路电路的通断,非常适合办公,工厂,学校等场景的灯路控制,通过部署到云平台,还可以实现虚拟化按钮控制, 是开关型产品的智能家居产品不二之选。
为了能够更好的供电,我们还推出了为这些板子供电的供电板,能够提供5v/4A的大电流供电,确保树莓派正常工作的同时,还能够为堆叠的开发板进行供电,非常强大!

淘宝链接: https://item.taobao.com/item.htm?spm=a1z10.3-c.w4002-4076757772.9.2a7c25a2dgUxjI&id=596936971926


支持远程安全开关机,支持12v电源输入,提供5v/4A的供电,同时还具有独特的超静音风扇进行散热,让你的一体化部署成为可能!
喜欢的小伙伴,快去官方淘宝店咨询:

52pi.taobao.com

树莓派4评测 国内版

树莓派4目前已经发布了,外媒给出了很多评测,国内也很多翻译稿了,几天前,52Pi团队也拿到了最新的树莓派4(2G版本).

其他不用多说,就大家最关心的问题展开讨论.

CPU到底提升了多少?很多外媒都用了HPL这个算法来衡量速度提升,首先,比较片面,而且也没提到相应的测试条件.究竟GCC版本是多少,编译参数是什么,只是给了一个对照表.对温度参数,那更是闭口不谈,实际功耗多少,也没有个明确的意思,网络能不能跑满,这也是很多人关心的话题.

首先,网友关心的第一问题,CPU提升了多少?(以下情况在良好散热条件下进行)

根据历史评测:http://www.52pi.net/archives/1306 数据来看

使用sysbench工具,单核性能从3B Plus的317.6974秒缩短到250.3330秒,提升大约27%.比3B的 370.5472秒提升大约48%.

而多核性能(4核全开)来看,也从3B Plus的80.6170秒缩短到64.1216秒,提升约26%,比3B提升约45%.

但是如果使用4G版本,则还有部分性能提升.

这里可见比官宣的要低上一些,为了公平起见,我另外在树莓派3B Plus上烧录同样的系统,进行同样的测试,基本没有变化.为了引入对比,这里加入了NanoPC-T4 (RK3399)作为对照组,由于RK3399可以用64位系统,而树莓派目前64位依然是Beta测试中,所以RK3399依然占有加成.6核全开情况下,RK3399跑分3.4272秒,大概是树莓派4在4核全开下18倍性能,期待树莓派适配64位系统,带来更高的性能提升.

网友关心的第二个问题,能不能跑满千兆?

测试用对传的主机配置是i7 6950X / 64G DDR4 / INTEL 82599万兆,使用的工具是iperf3,连接方式是和电脑主机直接连接.

可见,单纯的传输来说,是可以接近千兆的,除去协议开销,基本就是千兆网的配置了.比以前被USB 2.0 480Mbps掐住咽喉而言,现在算是不少的提升,由于以前USB2.0的原因,实际网卡速度还要限制在400Mbps左右.这个提升,算是翻倍不止了.

网友关心的第三个问题,USB 3.0速度是否能跑满?

首先,硬盘是闪迪SSD U110,就读取速度而言,是满足USB3.0的接口带宽的.(官标470MB/s)

可见USB 3.0速度比想象要低很多,但是也是USB 2.0没法比的,由于USB是10Bit传输,同时,这里的USB3.0控制芯片自身支持UASP,所以理论速度应该为500MB/sec,实际发挥了理论速度的71%水平.

网友关心的第四个问题,是否真的需要散热?

首先,如果不辅以散热,正常工作时,获取到的温度如下.

并且在负载运行后,快速到达温度墙,80度,其中意味,大家都能想到.

网友关心的第五个问题,加解密性能如何?

看到这个需求,我猜测大概是希望用来做软路由的,其中用户最关心的,应该是AES性能了,其中比较常用的AES-256(1K块)大约62MB/s,基本满足大部份需求.更多的参考截图.使用openssl测试工具测试.

网友关心的第六个问题,功耗如何?

首先,官方推荐使用5V 3A电源,我实测中发现,不接任何外设,也不连接网络,整机的功耗约为5V 0.6A(3W),连接网络后整机的功耗约为5V 0.8A(4W),进行stress火力全开的测试条件下,连接网络,不连接其他外设,整机功耗约为5V 2.1A(10.5W),如果算上用户要接移动硬盘等,则这些功耗还要在输入端扣除,建议使用更优质的电源,或者,直接上电源板吧.购买连接: https://item.taobao.com/item.htm?id=597551219738

网友关心的第七个问题,现在手上有的扩展板,是否还能继续使用?

首先,扩展板最依赖的,就是各种库,这样开发才方便,现在系统wiringPi库和Python GPIO库还没有更新,并不能直接操作IO,但是,我们的DockerPi系列模块,是非常方便的,就算脱离了GPIO库,我也可以用命令控制开关啊~ 具体可以参照 https://wiki.52pi.com/index.php/DockerPi_4_Channel_Relay_SKU:_EP-0099 购买链接: https://item.taobao.com/item.htm?id=596936971926

目前GPIO库是不完善的,如果你用的是DockerPi系列模块,就没这个烦恼了.

网友关心的第八个问题,Python 2是否还在?

Python 2目前是即将结束寿命的开发语言(2020 年 1 月 1 日 EOL),并且Debian Buster中,Python 2是被移除的,但是,在树莓派上,Python 2是依然存在的,并且,RPi.GPIO库看起来还会继续更新支持,只不过,现在开发新程序的话,最好是切换到Python 3了.

网友关心的第九个问题依然是开发问题,Java还在吗?

这个问题,跟Python 2在不在很像,由于大家都知道.Java正在走向商业化,所以,现在已经替换到OpenJDK了,当然,程序上的改动会有一些,相信不会难到Java程序猿.

其他关心的诸如GPU问题,官方还没更新最新的驱动,目前测试来看,提升几乎可以忽略,但是后续更新应该会带来更好的体验.另外由于树莓派4比较挑TF卡,所以也就要更加注意.

树莓派4B发布后续

这几天一直看着树莓派4B发布以来,各路渠道都是沸沸扬扬,各种欢呼呐喊,各种吐槽不满,各种期待焦灼的等待都不断在身边上演。

硬件上面做了什么改动么?有什么特别值得购买的么,我觉得唤醒你的树莓派3B+和3B才是王道,这个待会儿再聊~

先看看新pi的特别之处。。

Raspberry Pi 4型号B.

以下是亮点:

  • 1.5GHz四核64位ARM Cortex-A72 CPU(~3 × 性能
  • 1GB,2GB或4GB的LPDDR4 SDRAM
  • 全吞吐量千兆以太网
  • 双频802.11ac无线网络
  • 蓝牙5.0
  • 两个USB 3.0和两个USB 2.0端口
  • 双显示器支持,分辨率高达4K
  • VideoCore VI显卡,支持OpenGL ES 3.x.
  • HEVC视频的4Kp60硬件解码
  • 与早期的Raspberry Pi产品完全兼容

好吧,我这里不做评测,其实我更关心跑树莓派的兼容系统, 下面带领大家好好了解一下新版树莓派系统的过往。

巴斯特 – Raspbian的新版本

官方一直试图保持软件向后兼容旧硬件,因此所有Raspberry Pi型号的标准Raspbian映像现在都基于Debian Linux的最新版本Buster。

Buster?Excuse me ? 好吧,官方给了解释就算了。

为何选择巴斯特?

首先要提到的是巴斯特(皮克斯的“玩具总动员”电影中真正的狗,而不是用Slinky制作的玩具……)实际上是在官方Debian发布日期之前悄悄发布的。原因是Raspberry Pi 4的一个重要新功能是默认使用开源OpenGL视频驱动程序,这是使用最新版本的Debian开发的。将它所需要的东西移植到Raspbian Stretch上会有很多工作要做,所以我们决定在Raspbian Buster上启动 – 唯一的问题是Buster是否会在硬件出现之前做好准备!

事实上,准备的还算充分,不至于开机就黑屏,但是朋友测试teamviewer好像就出了问题。。。这么巧。

事实证明,事实并非如此。巴斯特的官方发布日期是7月7日,所以官方提前几周。也就是说,巴斯特现在处于“冻结”状态已有几个月了,只做了很小的改动,因此官方发布的版本与Debian将于7月7日正式发布的版本完全相同。

今年1月据说官方就开始在内部使用Buster,因此它已经在Pi上进行了大量测试,说它稳定而且功能强大,可以使用apt来更新从现在到7月7日之间发生的任何更改,而无需重新安装所有内容。

官方桌面图

Debian Stretch和Debian Buster之间没有太大的区别。令人遗憾地反映出当今世界的方式,大多数差异都是旨在使巴斯特难以入侵的安全变化。任何其他差异大多是小的增量变化,大多数人都不会注意到, 那就是说,基本上没啥变化。

当官方从Jessie搬到Stretch时,许多人评论说这两款操作系统实际上看不出任何差异 – 因为大多数变化都是“幕后”,桌面和应用程序看起来都是一样的。

桌面的整体外观在几年内没有显着变化,并且开始看起来有点陈旧,所以官方自己认为给Buster的外观做小小的刷新会很好。然后人们至少可以看到他们闪亮的新操作系统与旧的操作系统有所不同!其实就是用了一张柬埔寨的图换了以前的高速公路,其实我觉得还可以更好的…

新的外观

近年来,大多数计算机图形用户界面的设计出现了明显的趋势,就是扁平化; 减少装饰量,使按钮变成普通盒子而不是类似物理按钮的东西。可以在Windows等桌面操作系统和iOS等移动操作系统中看到这一点,因此官方决定做点儿类似的事了。(赤果果的抄袭吗?)

外观

大多数界面元素的整体外观已经简化; 减少了角落的曲率和用于给按钮之类的东西提供伪3D效果的阴影渐变。这种“更平坦”的设计看起来更干净,更现代,但这是一种取巧的行为; 它太容易走得太远,让事情看起来完全平淡无奇,据说Eben和UI设计师 对此还产生了分歧 ,Eben想要尽可能多的平整度,UI设计师想保留至少一点曲率,所以他们俩最后还是在某个中间点达成了共识。

这个桥段怎么看起来这么像乔布斯?我怎么觉得eben这个大头鬼在复刻乔布斯呢?pi store搞得很像apple store有没有? 发布会搞得也像apple的发布会有没有? 产品原型设计时的小冲突也和乔布斯当年的追求完美时遇到的一样有没有?

我觉得最像的是这系统越来越闭源的感觉有没有?专有硬件跑专有软件, 是不是有点儿当年Next的感觉~

官方还更改了Greg Annandale的新照片的默认桌面,已经转为灰色高亮颜色。

(如果你真的不喜欢新的外观,很容易恢复以前的外观 – 旧的桌面图片仍然安装,旧的UI主题也是如此。)

其他变化

官方系统一直在Raspbian中包含优秀的Thonny Python开发环境。在这个版本中,它现在是我们的默认Python编辑器,为此,默认情况下不再包括IDLE。

thonny

官方对任务栏进行了一些小的调整。现在,只有当您要弹出设备时,才会显示用于删除USB设备的“弹出”图标; 它剩下的时间都被隐藏了。同样,如果你使用的是较早的Pis而没有蓝牙支持,则现在隐藏蓝牙图标而不是灰色显示。此外,默认情况下,任务栏上不再显示CPU活动量表,因为在更强大的最新Raspberry Pi型号上,这一点已变得不那么必要了。如果仍想使用它,可以将其添加回来 – 右键单击​​任务栏并选择“添加/删除面板项”。按“添加”按钮,你会发现它被列为“CPU使用率监视器”。找到新的“CPU温度监视器”,如果有兴趣了解CPU的最新信息,可以添加它。

目前巴斯特失踪的一个项目是Mathematica。别担心 – 这只是暂时的删除!Wolfram正致力于让Mathematica与Buster一起正常工作,一旦准备好,它就可以从推荐软件安装。意味着有些就看重mathematica的朋友要失望了。

新的OpenGL驱动程序目前不支持旧的非OpenGL视频驱动程序的一些功能(例如像素加倍和欠扫描),因此如果正在使用GL驱动程序,则这些设置将隐藏在Raspberry Pi配置中。(GL驱动程序是Raspberry Pi 4的默认驱动程序 – 较旧的Pis默认情况下仍会使用非GL驱动程序。另外,如果使用Raspberry Pi 4无头驱动程序,我们建议切换回非GL驱动程序 – 选择’Legacy’在raspi-config中的“高级选项”中的“GL驱动程序”设置下。)

如果正在使用GL驱动程序,则会有一个新的“屏幕配置”工具 – 这使得你可以在Raspberry Pi 4上设置多个监视器的排列。它还可以用于设置自定义监视器分辨率,可用于模拟像素倍增的效果。


最后,“Raspberry Pi配置”中有几个新按钮控制Raspberry Pi 4的视频输出选项。(在Raspberry Pi的早期型号上运行时,这些按钮不会显示。)

Raspberry Pi 4上不可能同时具有模拟复合视频(通过3.5mm插孔)和HDMI输出,

因此默认情况下禁用模拟视频输出。

默认情况下,HDMI上的4Kp60分辨率也被禁用,因为这需要更快的时钟速度,从而导致更高的工作温度和更高的功耗。你懂的,买前树莓派,买后暖手派。

新按钮可以在根据需要启用这些选项中的任何一个中进行选择。

强烈不建议将现有的Stretch(或更早版本)系统升级到Buster。

官方无法知道我们对自己系统所做的更改,因此不知道当你迁移到Buster时可能会破坏什么。但是,官方已经测试了以下升级过程,它适用于官方发布的最后一个Stretch映像的纯净版本。而且官方不保证这个镜像能在你的系统上运行,所以建议买张新卡重新烧录。

官方在 Buster上安装了几个不支持的新应用程序。要删除它们,请打开终端窗口

sudo apt purge timidity lxmusic gnome-disk-utility deluge-gtk evince wicd wicd-gtk clipit usermode gucharmap gnome-system-tools pavucontrol

删除掉这些新应用程序就好了。

具体就期待新的树莓派4B到大陆吧!

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进行咨询和选购。 期待大家更好的玩儿法!

开源智能家居系统 Home Assistant 从听说到入坑

首先声明一下,感谢来自北京的熊小猫发来的稿件,非常人性化,用了markdown语法,在这里我代表我和52Pi全体编辑向你表示感谢!

和你的座右铭一样,一个脱离了高级趣味的人写的文章一定是有含金量的!!表示1000个赞送给你!

Home Assistant 是什么?

Open source home automation that puts local control and privacy first. Powered by a worldwide community of tinkerers and DIY enthusiasts. Perfect to run on a Raspberry Pi or a local server.

这是官方的原话,如果你看懂了就懂了,没看懂就听我给你编。说白了就是一款基于 Python3 的开源智能家居系统,非常适合运行在树莓派或本地服务器上。它集成了众多优秀的产品,比如 IFTTT 、 Arduino 、Google Assistant 、 Home Kit 、 MQTT 等。

好了,废话就这么多,让我们动手安装吧。

系统(基于 Python 虚拟环境,硬件 Raspberry Pi )

安装

安装 Python3

sudo apt-get install python3-pip python3-venv

坑:You may also need to install development libraries using 您可能还需要使用安装开发库。在各种文档里,基本都是在说安装Python,几乎没有提及到需要的其他依赖,所以我们需要安装几个依赖包。

sudo apt-get install build-essential libssl-dev libffi-dev python-dev

源替换

由于网络等原因,建议 pip 使用国内镜像,编辑 /etc/pip.conf 文件(据说此文件针对树莓派的)
复制粘贴以下内容并保存:

[global]
trusted-host=mirrors.aliyun.com
index-url=https://mirrors.aliyun.com/pypi/simple/

创建名为 homeassistant 的用户

sudo useradd -rm homeassistant

创建安装文件夹

cd /srv
sudo mkdir homeassistant
sudo chown homeassistant:homeassistant homeassistant

创建虚拟环境

sudo su -s /bin/bash homeassistant
cd /srv/homeassistant
python3 -m venv .
source bin/activate

安装 Home Assistant

pip3 install homeassistant

初次启动 Home Assistant

hass

等待几分钟让后台下载依赖,之后你便可访问 http://ip:8123,进入 Home Asssitant

自启动

sudo nano -w /etc/systemd/system/home-assistant@homeassistant.service

粘贴一下内容:

[Unit]
Description=Home Assistant
After=network-online.target

[Service]
Type=simple
User=%i
ExecStart=/srv/homeassistant/bin/hass -c "/home/homeassistant/.homeassistant"

[Install]
WantedBy=multi-user.target

重新加载进程管理

sudo systemctl --system daemon-reload

启用服务

sudo systemctl enable home-assistant@homeassistant

更新软件版本

进入虚拟环境

sudo su -s /bin/bash homeassistant
cd /srv/homeassistant
source bin/activate

更新

pip3 install --upgrade homeassistant

指定版本

pip3 install homeassistant==X.XX.X

开发版本

pip3 install --upgrade git+git://github.com/home-assistant/home-assistant.git@dev

至此,你的 Home Assistant 系统已经正常的运行起来了,接下来呢?是不是接入硬件或软件了呢?没错!!本节我们从最简单的开始,我们把特斯拉汽车接入进来。首先,我买不起特斯拉,哪位老板可以赞助一台,以便我把这篇文档个写完。言归正传,下一节,我们开始介入各种设备。

编者最后的意思是??特斯拉我们赞助不了,你要不要苏27呢?

USB 接口 GPS 在树莓派上的正确使用姿势~

产品说明:

Gps4.jpg
  • 支持Raspberry Pi型号A,B,A +,B +,Zero,2,3,内置L80-39 GPS芯片。
  • 使用UART或USB通信, 默认波特率 9600bps。
  • USB 接口采用CP2102作为USB转UART桥接芯片,稳定且速度更快。
  • L80-39具有66个搜索通道和22个同步跟踪通道,它可以在室外的最短时间内采集和跟踪卫星。我这里要强烈强调一下, 室内你搜不到星的哦, 一定要在室外,人家手册上这么写,你就去室外操作好吗? 别问为啥, 用脑子想想啊,卫星在天上,你要搜星,你喵在家里搜哪门子的星?

注意 我再次强调该模块适合户外操作。请把Antana(就是传说中的天线)放在露天。


兼容性列表(基本上只要支持串口通信的设备基本上都能支持,例如 各种 MCU, 51 单片机,arduino, 树莓派,香蕉派, Tinker board 等…

  • 兼容性
平台USB端口GPS模块
Raspberry Pi 3型号B Plus
树莓派零
Raspberry Pi零W
Raspberry Pi 3型号B.
Raspberry Pi 2模型B.
Raspberry Pi Model B +

功能

  • -165 dBm灵敏度,1Hz(默认),最高5Hz,66个通道
  • 启动时至少消耗100mA电流。
  • PPS输出可用于与卫星协调时间。
  • 定时精度: 1PPS输出 15ns
  • 内部贴片天线在室外使用时工作良好
  • 金属的SMA连接器用于外部有源天线,可以在室内使用,但是天线必须放置在室外.
  • fix状态LED闪烁,让您知道GPS何时确定当前坐标
  • EASY™,先进的AGPS技术,无需外部存储器
  • 支持时间服务应用程序,可通过PPS同步NMEA功能实现
  • 内置LNA可提高灵敏度
  • RTC电池兼容
  • 1×8公头,USB micro接口
  • 包括CP2102模块串行转换器USB 2.0到TTL UART

参数

类型
卫星66个接受通道,22个跟踪通道
工作电压4.5-5.5V
重量4.35克
最大电流最大100mA
工作温度-40〜+ 85℃
规模16.6x26x18.6(毫米)
全球定位系统L80-M39
贴片天线尺寸15.0 x 15.0 x 4.0mm
位置准确性<2.5M CEP
速度准确度<1.0米/ s的
没有ESEY的暖/冷启动<35S
ESEY热/冷启动<15秒
获取灵敏度-148dBm
跟踪灵敏度-165dBm
更新率1Hz(默认)高达5Hz
波特率4800~115200 bps默认为9600bps
协议NMEA 0183
安装电缆1 * 8堆叠标头USB微数据线
GPS的schama.png

如何连线

第一种方法:


这是使用 usb-to-ttl 的线缆接入 GPS的 Uart 引脚.

Uart风格接法:

由于Raspberry Pi 3,Model B的串口问题,它可能会导致意外问题,我们建议您不要将带有Raspberry Pi的GPS模块直接连接到GPIO引脚。当然,如果你要坚持用,也是可以的,只是需要将树莓派3B 和3B+的蓝牙功能关闭, 然后再将/dev/ttyAMA0设备释放出来,即可用树莓派的 GPIO 引脚和设备通信而不用占用 USB口了,操作步骤我大致讲解一下:

  1. 在树莓派上通过 sudo raspi-config 找到接口设置然后打开串口设备,机器上会出现一个/dev/ttyS0设备.
  2. 在树莓派上编辑/boot/config.txt 配置文件,检查 enable_uart=1 是否存在.
  3. 在树莓派上编辑/boot/cmdline.txt 配置文件,将整行复制后注释掉一行, 并将未注释行的 console=/dev/ttyAMA0, 115200 信息删除.
  4. 重启树莓派并在启动后安装适合自己的串口软件例如 minicom 或者别的.
  • 1.如果是使用一根USB-to-TTL线连接GPS模块和Raspberry Pi,你可以像这张图表一样连线:
GPS模块电线颜色
VCC红线
GND黑丝
TXD绿线
RXD白线
  • 2.重启 Raspberry Pi并登录,如果在桌面环境中使用raspberry Pi,请打开终端并按照后面步骤操作。

USB风格接法:

  • 只需使用microUSB电缆连接Raspberry Pi USB端口和GPS模块,并在Raspberry Pi上供电。
Gps1.jpg

如何使用

1.上电后登录系统。您可以打开终端并输入以下命令来安装GPS模块的包。
sudo apt-get update && sudo apt-get -y install gpsd gpsd-clients python-gps 
2.启动gpsd服务并对其进行控制。
启用它: sudo systemctl enable gpsd.socket 
启动它: sudo systemctl start gpsd.socket 
重新启动它: sudo systemctl restart gpsd.socket 
检查状态: sudo systemctl status gpsd.socket 

4.配置文件是在/ etc / default / gpsd中
修改gpsd的配置文件根据/ dev文件夹中串口的名称修改“DEVICE”参数。
如果通过USB电缆将其连接到Raspberry Pi,通常将其命名为“/ dev / ttyUSB0”。
您可以使用“nano”或“vim.tiny”编辑器来完成它。

我下面是写好的一个例子,我只是用 grep -v “#” /etc/default/gpsd | grep -v “^$” 过滤掉了配置文件中的注释和空行, 你们的配置如果是用 USB 接 micro USB口,然后直接插树莓派的 USB 口的,和我的配置基本是差不多的,除非你树莓派上还接了好多 USB设备,否则默认第一个设备就是/dev/ttyUSB0 , 参数 GPSD_OPTIONS= ” -F /var/run/gpsd.sock” 你这里定义啥名字就用啥名字行么?别乱改..否则找不到文件又是一顿刺挠, 你又要到群里喊叫代码不行,用不了.看仔细了哦~

Gpsconfig4.jpg

重启服务:
sudo systemctl restart gpsd.socket 
最后,使用此命令从GPS模块获取信息。
sudo cgps -s

一般情况下,如果不出幺蛾子,那么你会看到如下的信息,但是如果搜不到卫星的时候也很正常,你以为卫星时时刻刻都在你头顶上呢? 也许它跑开了一会儿,耐心等待, 基本上我们搜星也都是 30 多秒-5 分钟左右很正常, 这是 GPS 不是北斗, 自从美国出了个川普,GPS 就没有好用过….
5. GPS状态如下:

Gpsresult.png

客户端C中的示例代码

#include <gps.h> 
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <math.h>
int main()
{
int rc;
struct timeval tv;
struct gps_data_t gps_data;
if ((rc = gps_open("localhost", "2947", &gps_data)) == -1)
{
printf("code: %d, reason: %s\n", rc, gps_errstr(rc));
return EXIT_FAILURE;
}
gps_stream(&gps_data, WATCH_ENABLE | WATCH_JSON, NULL);

while (1)
{
/* wait for 2 seconds to receive data */
if (gps_waiting (&gps_data, 2000000))
{
/* read data */
if ((rc = gps_read(&gps_data)) == -1)
{
printf("error occured reading gps data. code: %d, reason: %s\n", rc, gps_errstr(rc));
}
else
{
/* Display data from the GPS receiver. */
if ((gps_data.status == STATUS_FIX) && (gps_data.fix.mode == MODE_2D || gps_data.fix.mode == MODE_3D) && !isnan(gps_data.fix.latitude) && !isnan(gps_data.fix.longitude))
{
/* gettimeofday(&tv, NULL); EDIT: tv.tv_sec isn't actually the timestamp! */

printf("latitude: %f, longitude: %f, speed: %f, timestamp: %lf\n", gps_data.fix.latitude, gps_data.fix.longitude, gps_data.fix.speed, gps_data.fix.time);
//EDIT: Replaced tv.tv_sec with gps_data.fix.time
}
else
{
printf("no GPS data available\n");
}
}
}
sleep(3);
}
/* When you are done... */
gps_stream(&gps_data, WATCH_DISABLE, NULL);
gps_close (&gps_data);
return EXIT_SUCCESS;
}
  • 编译并运行它。
gcc -o gps gps.c -lm -lgps 
sudo ./gps

GPS客户端的Python解决方案

  • 在Raspberry Pi上用 python 来接受 GPS 数据是最简单的,但是需要你安装一个 pyserial 的模块.

以下是三个如何使用python从连接到Raspberry Pi的GPS接收器获取GPS数据的示例。

思路: 使用GPSD客户端库, 然后手动解析NMEA句子或者使用pynmea2解析NMEA句子,也可以使用GPSD客户端库 

gpsd客户端库基于JSON。JSON对象具有“类”属性(例如TPV,SKY,DEVICE.etc …),可用于过滤不同的信息。
请参阅:[ http://www.catb.org/gpsd/gpsd_json.html | gpsd_json]

  • 本指南介绍了如何在Raspberry Pi上运行gpsd。
  • 下面的示例python脚本在TPV类上过滤,即时间位置速度报告,然后打印出相关信息。
由于 python 代码是需要考虑缩进的.所以我这里就截图给你看了.
下面是另一种方式,需要安装 gps 的库
这个就需要 pyserial 的库, 需要你 pip install pyserial 安装一下.
  • 使用pynmea2解析NMEA句子

下面的python脚本显示了如何通过直接连接到串行接口来访问GPS数据。
它过滤$ GPGGA NMEA句子,然后使用pynmea2来解析数据。
Pynmea2可以安装:

pi@raspberrypi ~ $ pip install pynmea2

这个方法比较简单, 另外还有一种方法就是直接自己解析数据结构,只用一个库,就是 pyserial.
尝试看看,对于其刷新速度,已经在产品特性里面介绍到了很多都是直接来自官方文档的内容,例如串口更新速率从 4800~115200bps ,默认是 9600bps, 更新率 1HZ 默认, 最高到 5Hz, 支持的协议 NMEA 0183 , 你们拿到数据后,如果是要用在一些网站的 api 上,需要转化一下格式的.
这个看 tater.li 之前帖子.

到这里就先告一段落. 下一篇帖子我做一个和高德地图 API 结合的例子.

Jetson Nano 夜用超长评测

板子的基本配置:

目前来说,我也算是国内比较早拿到板子的吧!

盒子背面还是有比较详细的一些介绍.

特别注意的是,这里提供电源有四种模式,分别是5V 2A(USB)/5V 3A(GPIO引脚)/5V 4A(DC接口)/5V 6A(所有电源IO反向供电),5V 2A是受限于USB自身,这就奇怪了,明显可以做Type-c接口,支撑更大功率?为什么没有做呢?

另外由于架构和核心多重原因,这个板子满功率大概是10W,剩余的功耗,是用于提供其他外设,比如以太网,USB等等.我实测如果使用华为5A USB线,也能启动带的动这个板子.(注:适配器标定5V 8A)

另外,如果使用DC供电,则必须禁用USB电源.(短路帽插上)

串口和音频口在不是很显眼的位置出现.

不过,标注是非常清晰的.(这串口还有流控?)

另一边还有40P的树莓派兼容排针,他的右边,当然就是POE排针了.

同样的,有很清晰的标注,这一点,比树莓派强.

为了更方便地散热,风扇接口也做了,就是不知道是否兼容大多数主板风扇定义.

在底部还留有电池座,应该是芯片内有RTC外设.

在核心板下方,还有MiniPCIE的接口.

想来可以接无线或者其他什么设备进来,看走线,走的是PCIE协议.

在主板有个非常特别的飞线电容.

核心板预留了EMMC位置.

可能以后会提供带EMMC版本?

当然,上图还有突兀之极的中文丝印,不过想到板子全是在国内生产,这样也不是很奇怪的事情.只是老外看得懂吗?

总体来说,用料是很扎实的,网口是EDAC的,核心板接插件是TE的.

除了主板,还包含一份简易说明,只是这个说明,有点简单.

这个板子必须要买的配件有哪些?首先,如果要做实时分析,摄像头是一定要的,可以是Pi官方摄像头,也可以是USB摄像头,只不过,如果是USB摄像头的话,程序要微调一下.屏幕,是必备品,因为开机配置如果不做的话,启动根本不会继续往下执行.

虽然,我很多时候也只是用来做分析,通常在终端环境下就够用了,但是如果没屏幕根本没法进行下一步,我测试过这个屏幕可以用:http://wiki.52pi.com/index.php/5-Inch-800×480-HDMI-TFT-LCD-Touch-Screen_SKU:Z-0053

当然,没有键鼠,也没法继续,这些,也要自备了.

最后,因为Jetson Boot时间比较长,所以,一开始是没画面的,大概要等30秒才能看到开机过程,并且,首次启动网络灯是不会闪的.(路由侧会闪烁),也不怎么发热.配置完整个过程还需大约20分钟,主要还是大多数资源在网络,且拔掉网线也会使劲重试到超时,还不如多等一会.

软件资源基本就是系统一个,Ubuntu 16.04 x64宿主机(包括nvidia-docker并下载有DIGITS.),其他东西基本没有.

至于其他软件?你就当他是ARMv8板子跑就是,CPU性能的话,肯定不是值得炫耀的部分,但是也不会差到哪里,毕竟还要靠CPU打包数据.至于从数据看,是比树莓派出彩的!

以图形部分,BCM2837 VideoCore IV:(28.8 GFLOPS) 对比 128 Maxwell GPU(472 GFLOPs),完全不是一个水平线.

最后补刀,如果要扩展配件,将是无底洞~ 欢迎入坑~ (已经通过买各种模块板子,至少是5位数水平了吧.)

测试软件:

  1. 系统镜像:jetson-nano-sd-r32.1-2019-03-18.zip (你猜哪里下载?不知道?那你一定没好好读说明书:https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit)
  2. 其他软件:https://github.com/dusty-nv/jetson-inference

很幸运的是,由于Jetson Nano出生比较晚,所以JetPack是预装在系统里面了.但是,系统也真的大,以至于我烧了1个小时以上.建议大家有条件,还是买个更快一点的TF卡,不然会拖后腿的.

另外这个比较挑卡,我这里有好多不同品牌的卡,结果只有一个能启动?

JetPack大概就是TensorRT/Caffe等各种神器集合,也算是CUDA的一个中间件.

废话太多了,太多了,下面马上….上….前奏.主要是实现物体标记和物体识别.大家接触了很多CNN相关的东西,所以对这两个肯定也不陌生.至于基础的方程预测之类的,官方没有给出例子,当然,这些自己写也很简单.

先安装cmake,下载需要的源.

$ sudo apt update
$ sudo apt install cmake
$ git clone --recursive https://github.com/dusty-nv/jetson-inference
$ cd jetson-inference
$ mkdir build
$ cd build
$ cmake ../

嗯,这个过程很漫长,因为下载大量的软件.如果你网络可以直接访问英伟达的网站,那可以直接cmake,如果不能的话.就需要处理一下,至于怎么做,就不方便说了,大家肯定有办法.

下载过程如下图.(大约1.5GB+数据要下载,根据网速不同,所需时间也不同,Jetson Nano配备的是千兆网卡)

cmake完成后应该如此:

接下来make编译,但是产生了很多警告,这类警告只是编码规范问题,不影响程序结果.

通过sudo make install完成安装.

完成后,你得到了一个支持GOOGLENET/GOOGLENET-V12/ALEXNET网络框架的CUDA优化的机器学习支持库.

先试试图像分类,目前用的是默认训练好的库.

$ cd jetson-inference/build/aarch64/bin
$ ./imagenet-console bird_0.jpg output.jpg

运行过程日志也是有输出的,第一次运行会比较慢,因为神经网络第一次加载时候需要解释.后面会讲到如何构造自己的神经网络训练结果包,这个包也就是丢到Jetson上面用的.

嗯,判断准确度还可以,他认为这个图是American robin,实际上他肯定不止一个结果,只是显示了最可信的结果出来.

但是由于这个库可能是训练不太好,我上传了个苹果,识别出来是石榴?

而其他候选结果,分别是无花果>澳洲青苹>橙子>七叶树.

不过,处理速度确实很快,可见,直到输出层也只需要80ms,相对于在树莓派上来做,都要用秒来衡量的.

这个程序还是开源,代码也不难:https://github.com/dusty-nv/jetson-inference/blob/master/imagenet-console/imagenet-console.cpp

而特定物体查找的例子,跟这个也差不多.

$ ./detectnet-console peds-001.jpg output.jpg facenet

从返回结果看到,捕获了3个对象以及他们的坐标.

结果是这样的.

但是当我随机在互联网上找到另一张图时,表现就差了一些了,也许还是训练不足的原因.

而且,目前也只有几个模型,更多,还是去训练吧.(注意看classes,就是能识别的类)

既然训练不足,不能满足现状的话,只能使用DIGITS重新训练了.

但是,训练只能在PC上做,做好之后,把训练结果变成一个压缩包放在SD卡上,实现离线识别.至于为什么不用开发板直接跑识别,我觉得主要问题不在性能,而在储存上(带宽/容量).

记得Movidius上也是如此,先在PC上训练,再最终训练结果写入棒子(本来训练结果就比较小,训练集比较大),然后实际使用就可以了.

不过,有一点特别要注意的是,nvdia-docker中绑定的路径,才是真正的操作路径.而非官方git中给出的参考路径形式,如下图,目录是/data下的ilsvrc12目录.

只要训练之后,下载训练后的结果层次,就可以使用了,当然也可以自己添加训练数据,目录中的形式表示得很明白,最后还可以先在PC上测试.

下载的训练结果,复制到Jetson Nano中解压,指定NET环境变量之后,就可以开始使用了.由于这些数据试验结果也是没什么差别的,所以就不再重复了.

NET=networks/GoogleNet-ILSVRC12-subset

如果真要得到更准确的数据,还需要自己真正的找一堆数据来分类,让学习结果更靠谱.

其他方面来说,系统是基于ARMv8的,真正的64位系统.

从sysbench结果来看,CPU性能大约是30倍于树莓派3B Plus @ ARMv7,主要得益于DDR4,CPU内核较好,且使用64bit指令集.

在连续执行识别操作,并运行stress耗尽CPU性能,再观察内部温度传感器,竟然如此凉快?当然,也许是因为大散热器的原因,但是,实际温度依然在缓慢上升,在实际使用中,最好是配备散热器的.

5分钟后的温度结果.

另外系统中配备了很多针对NV GPU优化的软件,这也是一大亮点.

并且是Unity桌面系统,尤其漂亮,只是比较吃GPU.

还内置了Docker,Python 3,Cuda支持,OpenGL支持,OpenCV支持,谷歌浏览器,文档编辑器,GCC7等,可以看作是比较完整的Ubuntu发行版.16G的TF写入后预计剩余空间都不足1G,推荐使用32G以上或者外挂储存.

如果给他定位成高端树莓派,那还是不值当的,毕竟人家擅长的是GPU啊.

最后来一个功耗实测,共同的测试条件:

  • 无USB设备
  • 无额外配件
  • 以太网有线连接(10Gbps)
  • SSH登录
  • 使用DC接口供电

测试结果,满载时为死循环识别图片(GPU)或使用stress耗尽性能(CPU):

  • 空载:0.533A @ 5.1V
  • CPU满载,GPU空载:1.117A @ 5.1V
  • GPU满载,CPU空载:2.133A @ 5.0V
  • CPU,GPU满载:2.838A @ 5.0V
  • CPU,GPU满载,且接入HDMI屏幕,HDMI屏幕独立供电:3.017A @ 5.0V

树莓派鼠标电脑了解一下?

​hi,大家好,今天看到一个国外牛人用树莓派结合3D打印机制作了一款小巧的鼠标电脑,如下图:

TIM截图20190117113239.jpg

换个角度再看一下:

TIM截图20190117113338.jpg

屏幕看上去很小,感觉看起来比较费劲,但是直接集成在鼠标上也是非常酷的操作啊!这波操作可以说是很6了。

那么有人会说没有键盘怎么操作啊??

TIM截图20190117113520.jpg

原来它被藏在鼠标的内部了,白色外壳拉出来就是键盘了,呃, 怎么感觉这么反人类呢,横着怎么打字? 不过歪果仁脑洞大是出了名的。我们就忍了吧。

TIM截图20190117113656.jpg

右下角这个开关电源是不是显得很大气啊?哈哈,我觉得手大的人会误操作。

TIM截图20190117113834.jpg

外壳的制作是使用fusion360的,据说很好用,有兴趣的可以自我尝试。

TIM截图20190117114002.jpg

单手操作的姿势是这样的,另一只手就可以拿着手机拍照了么?不知道做这个的初衷是什么?知道的小伙伴评论区见。

操作界面是这个画风:

TIM截图20190117114223.jpg

屏幕很小,看字打游戏都有点儿困难,但是很迷你的小玩意儿总是会吸引一部分人注意,我是觉得听好玩儿的。看这个DIY的大小,我推断鼠标外壳的下面藏着的是树莓派zero的板子,一个迷你小键盘。这个屏幕看上去是tft2.2非触摸屏,

然后如果想要打字,是这样的:

TIM截图20190117114536.jpg

如果玩儿我的世界, 得用个放大镜看比较舒服。。。

TIM截图20190117114618.jpg

这样的项目,大概用个三五天就可以完成了,大家可以猜测一下它的这个项目都用了什么器件?

可以在评论区留言哟!

另外,年前有一大波piboxy来袭,快去抢购, 抢购链接猛戳这里:

piboxy购买链接

TIM截图20190117134045.jpg