借助NodeRed实现RevPi与阿里云物联网平台通信

Node-RED是构建物联网(IoT)应用程序的强大工具,它使用可视化的编程方法,允许开发人员将预定义的代码块(称为“节点”)连接在一起以执行任务。当连接在一起时,通常由输入节点,处理节点和输出节点组成的连接节点构成一个“流”。RevPi Core模块已经内置Node-RED运行环境,本文将介绍基于Node-RED如何实现RevPi Core模块与阿里云物联网平台的通信。

1、启动Node-RED

RevPi Core模块已经搭建好了Node-RED运行环境,并且额外包含适用于RevPi设备的节点,无需额外安装软件,直接启动运行即可。

首先通过putty远程连接RevPi,输入以下命令以启动Node-RED:sudo node-red-start

等待Node-RED启动后,通过在浏览器中输入RevPi的IP:1880进入Node-RED界面。

可以通过命令sudo systemctl enable nodered.service设置Nore-RED的开机自启动。

2、配置阿里云物联网平台

在物联网平台控制台点击设备管理->产品->创建产品

按照下图所示配置产品:

点击保存,并前往添加设备:

输入设备名称,可以自行选择,这里设定的是RevPi。

点击确认,并前往查看设备信息。

暂时不要关闭此设备信息页面,稍后还需要此页面的相关信息。

3、创建Node-RED流

这里将采用MQTT通信方式与阿里云物联网平台进行通信。首先建立如下图所示流:

时间戳(即inject节点)在这里仅起到触发作用,无需设置。

exec节点可执行系统命令,本文借助exec节点采集RevPi的CPU温度,并将其上传到云平台。对exec节点进行如下图所属配置:

其中命令框中输入:/usr/bin/vcgencmd measure_temp

4、mqtt out节点参数设定

mqtt out节点配置可以参考阿里云物联网平台文档“使用MQTT.fx接入物联网平台”,文档中采用的是MQTT.fx软件,但配置参数基本相同。

点击添加新的mqtt-broker节点,节点名称自行设定,本例设为AliIOT:

需要配置的参数包括连接和属性两种,下面依次看一下:

4.1、服务端

根据官方文档,Broker的地址格式为:

${YourProductKey}.iot-as-mqtt.${YourRegionId}.aliyuncs.com

上面的ProductKey可以在设备信息中找到,RegionId可以参考网址:

https://help.aliyun.com/document_detail/40654.html#concept-h4v-j5k-xdb

完整示例:a1A96I6bXvh.iot-as-mqtt.cn-shanghai.aliyuncs.com

端口选择1883即可。

4.2、客户端ID

客户端ID的格式为:

${clientId}|securemode=3,signmethod=hmacsha1|

clientId用户可以自行设置,长度在64字符以内。本例中设置为RevPiNodeRED。

securemode为安全模式,TCP直连模式设置为securemode=3,TLS直连为securemode=2。本例选择安全模式为3。

signmethod为算法类型,支持hmacmd5和hmacsha1。本例选择hmacsha1。

完整示例:RevPiNodeRED|securemode=3,signmethod=hmacsha1|

4.3、用户名及密码

用户名的格式为:

${YourDeviceName}&${YourProductKey}

DeviceName和ProductKey均可在设备信息处找到,请自行对应填写。

完整示例:RevPi&a1A96I6bXvh

密码需要根据设备信息进行加密运算生成。可以借助password生成小工具,下载地址是:

https://files.alicdn.com/tpsservice/88413c66e471bec826257781969d1bc7.zip?file=88413c66e471bec826257781969d1bc7.zip

下载后解压,双击sign文件即可运行。

如图所示,如实填写相关信息,时间戳可省略,点击generate即可生成密码。另外还可以以手动方法生成密码,详细可参考阿里云物联网平台官方文档。

4.4、主题

将以上Broker相关信息填写完成后点击添加即可。

主题可以在产品->Test->Topic类列表->自定义Topic中选择具有发布权限的Topic,并根据设备名称进行更改。

当然,也可以自定义具有发布权限的主题。本例采用的主题为:

/a1A96I6bXvh/RevPi/user/update

mqtt out节点的QoS和保留选项设置可自行选择,配置完成后点击“完成”即可。然后点击“部署”按钮,将此流程部署到设备并运行。

5、通信测试

部署完成后,正常情况下mqtt out节点应显示“已连接”,若“未连接”或者一直在“连接中”,请检查相关配置是否有错。

点击时间戳,触发流程,即可将温度信息上传到云平台。

可以在阿里云物联网平台控制台的监控运维->日志服务下,选择Test产品即可在云端运行日志下查看到接收到的温度信息。

当然,也可以通过具有订阅权限的主题实现从云平台将信息发送到RevPi,如果您对这方面感兴趣,可以根据官方手册自行探索实现方式。

如果需要任何帮助,欢迎联系我们。

新品预告:MCC 128 – 基于树莓派的16位电压测量HAT模块

继 MCC 118之后,MCC即将推出又一款基于树莓派®,测量电压的DAQ HAT产品 – MCC 128。敬请期待!

MCC 128 是一款16位,高速,电压测量DAQ HAT模块,用于市场上最流行的单板计算机树莓派®。

HAT是种附加板,带有40W GPIO(通用输入/输出)连接器,符合树莓派HAT规格。

MCC 128 HAT提供8路用于电压测量的单端(SE)模拟输入口。最多可将8块MCC HAT叠加至树莓派®。

16位电压输入

支持8路单端和4路差分输入模式

最大采样率达 100 kS/s (堆叠板总采样率达 320 kS/s)

多种输入量程

内置缓存器支持高速采集

支持外部采样时钟输入

外部数字触发输入

螺丝端子连接

最多可将8个MCC HAT叠加至树莓派

软件:可在GitHub上获取MCC DAQ HAT全套开源库

操作系统:Linux® / Raspbian

可编程API:C, C++, Python

MCC DAQ HATs系列模块,基于无处不在的低成本树莓派®,为您带来高质量的测试测量方案!

了解更多 MCC DAQ HATs 产品请点击这里:

数据采集专家MCC

原文:https://mp.weixin.qq.com/s/hx40GXcBYRrj1tKrT7KClA

在树莓派上安装 OpenMediaVault(OMV)

OpenMediaVault,是一个开源的基于 Debian Linux 的下一代网络附加存储(NAS)解决方案。它包含众多服务,如 SSH、(S)FTP、SMB / CIFS、DAAP 媒体服务器、RSync、BitTorrent 客户机等。并具有通过插件可增强的模块化设计框架特性。

这里介绍的 OpenMediaVault 的安装方法是基于 Raspberry Pi OS 的,需要先准备好 Raspberry Pi OS 系统,然后在运行 OpenMediaVault 的安装脚本即可。

安装 Raspberry Pi OS 可参考这里:

启用 SSH 服务

将刷好了系统的 TF 卡的 boot 分区根目录创建一个名为「ssh」的文件夹。然后将 TF 卡插入树莓派,给树莓派通电。待系统启动之后,使用 PuTTY 登录到树莓派。

更新树莓派系统

运行下面的命令更新树莓派系统。

sudo apt-get update sudo apt-get upgrade

运行 OMV 安装脚本

在终端运行下面的命令开始安装:

wget -O – https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/install | sudo bash

如果上面的 URL 被墙了,可以用 CDN 的链接:

wget -O – https://cdn.jsdelivr.net/gh/OpenMediaVault-Plugin-Developers/installScript@master/install | sudo bash

安装完成之后重启树莓派。

通过 GUI 登录 OMV

直接在 PC 的浏览器打开 http://<树莓派的IP地址>

即可看到 OMV 的登录页,默认的用户名为「admin」,密码「openmediavault」。

随后即可看到 OMV 的仪表盘和包含各种功能的菜单。

配置和使用 OMV

关于 OMV 的配置和使用,推荐一个系列视频,UP 主讲解得非常细致,简直是手把手教会。

https://space.bilibili.com/454610060/channel/detail?cid=97025

墨水屏相框:一年时间只放一部电影

MAKER: Tom Whitwell/译:趣无尽(转载请注明出处)

制造一台这样的黑白相框,用一年的时间来放一部老电影,每天的咖啡都能品出不同的灵感。

它用到了树莓派、电子墨水屏和宜家相框,以及 VSMP(Very Slow Movie Player 超慢速电影播放)技术。将普通电影的每秒 24 帧播放速度降至每小时 24 帧,放慢了 3600 倍,这样一部 142 分钟的影片「2001: A Space Odyssey」(2001 太空漫游)由它播放完,将耗时大约一年。

当人们习惯用两倍速疯狂刷剧的时候,用一年时间欣赏一部经典电影无疑是一种轻奢、不浮躁的生活态度。

材料清单

树莓派4B × 1

电子墨水屏 × 1

MicroSD 卡 × 1

5V 3A TYPE-C 电源适配器 × 1

木质相框 × 1

制造一台这样的相框大概需要搞定下面几个事情:

1、将电影文件和控制程序上传到树莓派上。

2、安装好电子墨水屏以及树莓派上的驱动程序。

3、编程(或者直接使用本项目提供的代码)从电影文件中提取帧,调整每一帧的尺寸并处理抖动。逐帧显示在屏幕上。

4、找一个可以装得下以上组件的相框,组装好。

这个项目没有很复杂的硬件部分,所用到的软件和驱动程序都已经提供了,只需要安装和部署即可使用。制造所用的材料合计约 120 英镑。

准备好树莓派

推荐使用 2GB 内存以上的树莓派 + Raspberry Pi OS。为树莓派安装好系统,参考:

使用 Etcher 给 SD 卡安装树莓派系统

通过配置 WiFi,让树莓派接入网络,参考:

无屏幕和键盘配置树莓派WiFi和SSH

开启 SSH,使用 PuTTY 登录树莓派终端。传输文件和电影可以通过 SFTP,使用 FileZilla 即可。

安装电子墨水屏

这里使用了 Waveshare 的一款墨水屏,带驱动板。将驱动板插入树莓派的 GPIO 即完成屏幕和树莓派的连接。驱动这个屏幕需要启用树莓派的 SPI 接口。运行 sudo raspi-config 进入配置工具来启用 SPI。

下面来下载并安装驱动软件和测试程序到树莓派上。

git clone https://github.com/TomWhitwell/SlowMovie/ cd SlowMovie/e-paper/RaspberryPi&JetsonNano/python sudo python setup.py install

如果一切正常的话,运行下面的代码示例,墨水屏会显示当前时间。

python examples/epd_7in5_V2_test.py

小试牛刀

上面的步骤都测试通过之后,就可以小试牛刀了。进入 SlowMovie 目录。

cd ~/SlowMovie

我所用的超慢电影播放器用了 ffmpeg-python、PIL 库。

首先需要在树莓派上安装 FFmpeg,参考官网 https://ffmpeg.org/

然后安装 Python 库。

sudo apt-get install ffmpeg-python sudo apt-get install python-pil python3-pil

运行 helloworld 查看效果。

python helloworld.py

这个脚本会随机选择一个 mp4 文件,随机提取一帧、调整大小并处理抖动,最后展现在屏幕上。以下是部分关键代码:

# Use ffmpeg to extract a single frame from the .mp4 file, resize it, letterbox it and save it locally def generate_frame(in_filename, out_filename, time, width, height): ( ffmpeg .input(in_filename, ss=time) .filter(‘scale’, width, height, force_original_aspect_ratio=1) .filter(‘pad’, width, height, -1, -1) .output(out_filename, vframes=1) .overwrite_output() .run(capture_stdout=True, capture_stderr=True) ) # Import, initialise and clear the display from waveshare_epd import epd7in5_V2 epd = epd7in5_V2.EPD() epd.init() epd.Clear() # Check how many frames are in the movie frameCount = int(ffmpeg.probe(inputVid)[‘streams’][0][‘nb_frames’]) # Pick a random frame frame = random.randint(0,frameCount) # Convert that frame count to Timecode used by ffmpeg msTimecode = “%dms”%(frame*41.666666) # Open the saved frame in PIL pil_im = Image.open(“grab.jpg”) # Convert the image to a 1 bit bitmap (Just zeros and ones) # using Floyd Steinberg dithering pil_im = pil_im.convert(mode=’1′,dither=Image.FLOYDSTEINBERG) # display the image epd.display(epd.getbuffer(pil_im))

超慢速电影播放器

如果上面的步骤都正常工作,那么你可以通过 SFTP 传输更多视频文件到 SlowMovie/Video 目录。

运行下面的脚本查看效果。

python slowmovie.py

还有更多参数可以使用,例如

python slowmovie.py -h

将保存播放进度,以便在下次启动时继续播放。

python slowmovie.py -f 2001.mp4 -d 150 -i 1

将播放 2001.mp4 文件,并以每 150 秒更新一帧画面。也就是每小时播放 24 帧。

最后来设置开机运行。

sudo nano /etc/profile

添加下面两行:

cd SlowMovie sudo python slowmovie.py

按下 Ctrl+O 保存,按下 Ctrl+X 退出。

完成之后,下次重启的时候就可以直接进入播放状态了。

所用到的代码文件请在项目文件库中下载:

https://make.quwj.com/project/339

via

在树莓派上使用 OpenVX API

OpenVX 是个开放、免版税的,用于跨平台计算机视觉应用加速的标准。OpenVX 实现了计算机视觉处理中性能和能耗方面的优化,特别是嵌入式和实时应用案例中起到重要作用,例如面部、身体和动作跟踪,智能视频监控,高级驾驶协助系统(ADAS),物体和场景重建,增强现实,视觉检测,机器人学等等。除了 OpenVX 规范,Khronos 还开发了一整套一致性测试和采用者计划,让标准执行者可以测试他们的执行,如果通过一致性测试即可使用 OpenVX 标识。

树莓派目前已经支持 Khronos OpenVX 1.3 API 了。下面来介绍一下如何在树莓派4B上安装开源 OpenVX 1.3 库。

git clone –recursive https://github.com/KhronosGroup/OpenVX-sample-impl.git

使用 Build.py 编译安装 OpenVX 1.3。

cd OpenVX-sample-impl/ python Build.py –os=Linux –venum –conf=Debug –conf_vision –enh_vision –conf_nn export OPENVX_DIR=$(pwd)/install/Linux/x32/Debug export VX_TEST_DATA_PATH=$(pwd)/cts/test_data/ mkdir build-cts cd build-cts cmake -DOPENVX_INCLUDES=$OPENVX_DIR/include -DOPENVX_LIBRARIES=$OPENVX_DIR/bin/libopenvx.so\;$OPENVX_DIR/bin/libvxu.so\;pthread\;dl\;m\;rt -DOPENVX_CONFORMANCE_VISION=ON -DOPENVX_USE_ENHANCED_VISION=ON -DOPENVX_CONFORMANCE_NEURAL_NETWORKS=ON ../cts/ cmake –build . LD_LIBRARY_PATH=./lib ./bin/vx_test_conformance

使用范例库测试安装是否成功。

cd ~/ && mkdir OpenVXSample-canny cd OpenVXSample-canny/ git clone https://github.com/kiritigowda/openvx-samples.git mkdir canny-build && cd canny-build cmake -DOPENVX_INCLUDES=$OPENVX_DIR/include -DOPENVX_LIBRARIES=$OPENVX_DIR/bin/libopenvx.so ../openvx-samples/canny-edge-detector/ make ./cannyEdgeDetector –image ../openvx-samples/images/face.png

更多信息可以参考:

https://www.khronos.org/registry/OpenVX/specs/1.3/html/OpenVX_Specification_1_3.html

https://github.com/KhronosGroup/OpenVX-sample-impl/tree/openvx_1.3

https://github.com/KhronosGroup/OpenVX-sample-impl

仅一年,基于树莓派的平板电脑 CutiePi 最新进展

我们曾介绍过开源项目《CutiePi 树莓派平板电脑》,近期又有新消息。经过一年的打磨,已经非常漂亮,不出意外的话首批产品今年 11 月前即可发货。

CutiePi项目旨在推出一款即用型树莓派平板电脑。CutiePi,简单来说,就是一个像样的平板电脑形态的树莓Pi,看起来就是一个商业产品,这款平板电脑厚度12毫米,开发者通过使用RPi计算模块而不是完整的单板计算机(SBC)来实现这一壮举,这也意味着他们不得不使用基于树莓派 3B+ 的 Compute Module 3+ 计算模块。

CutiePi 在上面和周围增加的是电子元件和组件,使其成为一个可用的终端设备。这包括一个 8 英寸 1280×800 的屏幕,各种端口。WiFi 802.11 b/g/n 和蓝牙 4.0,还有一块 5000 毫安时的电池,目前测算可以提供 5 小时的使用时间。甚至还有6个 GPIO 针脚,方便需要连接一些USB没有覆盖到的硬件用户。

让 CutiePi 吸引人的地方在于它的一切是开源的,包括使用的定制板,布局设计,以及在上面运行的定制触摸友好用户界面。这基本上允许任何有资源和知识的人自己制作自己的CutiePi。有兴趣的人可以尝试在Kickstarter上以189美元的价格抢购一个,最终零售价格为199美元。该活动仅用了4个小时就达到了目标。

基于树莓派制造智能的行星观测器

MAKER:snowbiscuit/译:趣无尽 Cherry(转载请注明出处)

最近的日环食吸引了一大波天文爱好者。在我所居住城市的科技中心大楼外就有一台大型的天文望远镜,它可以鸟瞰宇宙中的其他星球。我一直认为那些真实存在、又遥不可及的外太空与微小的我有着某种神秘的联系。

我准备用树莓派和天文望远镜复制一台智能的行星观测器。从 NASA 获取已知行星的坐标数据,然后这台仪器就可以自动调整角度,聚焦这颗行星,让我可以很方便地观测它们。相信它将很好地带你观看和感受地球之外的外太空世界。

材料清单

树莓派 3B ×1

16×2 LCD 屏幕 ×1

带驱动器的步进电机 28-BYJ48 ×2

按钮 ×3

法兰联轴器 5mm ×2

按钮指南针 ×1

M3 螺栓/螺母 ×8

3D 打印外壳 ×1

3D 打印望远镜 ×1

行星坐标数据

这里将介绍两种定位行星的方法。

1、使用水平坐标系。它可以从北方(方位角)向上方倾斜和从地平线(高度)向上方倾斜,因此是以你的位置而定,所以角度会有所不同。此方法以北方作为参考。

请点击链接查看:

https://en.wikipedia.org/wiki/Horizontal_coordinate_system

2、将树莓派连上 WiFi 后,直接连接到 NASA 获得数据。

访问行星数据

从 NASA 喷气推进实验室(JPL)获取数据:

https://ssd.jpl.nasa.gov/?horizons

访问数据前需要安装 AstroQuery 库,用于查询行星网络表单和数据库的工具。

请点击下载安装:

https://astroquery.readthedocs.io/en/latest/jplhorizons/jplhorizons.html

请确保安装最新版本的 Raspbian(我使用的是3.7.3版)。打开终端运行命令:

sudo apt install python3-pip

然后使用 pip 安装 astroquery 的升级版本。

pip3 install –pre –upgrade astroquery

在继续完成项目前,请使用简单的 Python 脚本访问该数据,确保正确安装了所有的依赖项。

from astroquery.jplhorizons import Horizons mars = Horizons(id=499, location=’000′, epochs=None, id_type=’majorbody’) eph = mars.ephemerides() print(eph)

接下来会显示火星的详细位置。

请点击该链接查看火星定位是否正确:

https://theskylive.com/planetarium

为了方便查询,我会做简化处理。其中 id 表示是 JPL 数据中与火星的数据,epochs 表示获取数据的时间,id_type 表示询问太阳系主体。“000”在格林威治天文台的位置代码中表示英国的位置。其他位置可点击查看:

https://minorplanetcenter.net//iau/lists/ObsCodesF.html

故障排除:

如果出现报错:No module named ‘keyring.util.escape’

可以在终端中输入以下命令:

pip3 install –upgrade keyrings.alt

编程

为了找到精确的坐标数据,在 getPlanetInfo 方法修改位置信息(使用上一步中的天文台的列表修改这里的 location)

def getPlanetInfo(planet): obj = Horizons(id=planet, location=’000′, epochs=None, id_type=’majorbody’) eph = obj.ephemerides() return eph

完整的 python 脚本,请在项目文件库中下载:

https://make.quwj.com/project/240

连接硬件

在该步骤中,要连接面包板、跳线、两个步进电机、LCD 屏幕和三个按钮。

在树莓派上找到引脚,在终端上输入

pinout

它会可以显示 GPIO 编号和板子编号。

连接方式如下:

第一个进电机 – 7、11、13、15

第二个进电机 – 40、38、36、32

按钮 1 – 33

按钮 2 – 37

按钮 3 – 35

显示屏 – 26、24、22、18、16、12

全部连接后,运行 python 脚本

python3 planetFinder.py

在屏幕上会显示设置文本,并且按钮可以启动步进电机。

3D 打印外壳

1、3D 打印外壳。

所有打印 STL 文件,请在项目文件库下载:

https://make.quwj.com/project/240

2、测试外壳

外壳组装到位后,进行其他组件的安装。将按钮安装到位,固定显示幕和步进电机,打磨外壳,确保所有组件都能正常使用。

安装电子组件

1、安装步进电机

步进电机将控制位于外壳上方的望远镜的仰角,因此需要延长电线以便旋转。请如图进行安装。

接线完成后,运行 python 脚本,检查是否一切正常。

然后将电线放回管内,直到步进电机就位,再将步进电机固定在外壳上,然后将外壳粘合。

2、安装按钮和 LCD 屏幕

如图所示安装按钮,在焊接前使用螺母使其固定到位。

再使用 M3 螺栓和螺母固定 LCD 显示器。请将 LCD 其中一个引脚焊接到电位计上。

在将所有的组件粘合之前,再次测试代码,确保所有能够正常工作,因为该阶段更容易修复。

3、添加法兰联轴器

将 3D 打印的底座连接到步进电机。

将法兰联轴器安装在步进电机的顶部,并用螺钉固定到位。

将望远镜安装到旋转塔顶上的电机很简单,因为有足够的空间可以将小螺钉固定到位。

一个法兰器粘连在旋转塔架的底座上,另一个安装在望远镜上。

再次测试,如果有问题,马上修复并确保所有连线正确。

启动

因为想把它独立运行,而不是每次手动代码寻找行星,因此将其设置为在树莓派开启时运行代码。

在终端中输入。

crontab -e

在打开的文件中,在文件末尾,另起一行输入。

@reboot python3 /home/pi/PlanetFinder/planetFinder.py &

代码保存在 PlanetFinder 文件夹中,因此文件位置为: /home/pi/PlanetFinder/planetFinder.py。如果你保存在其他地方,请在此处更改。

说明:它允许代码在后台运行,因此它在启动时不会阻止其他进程。

完成组装

将小指南针添加到旋转底座的中间,最后,将所有的组件安装到位。

使用方法

1、当望远镜开始启动时,调整垂直轴。按下向上和向下按钮可以移动望远镜,调整好后按下 OK 按钮即可(位于底部)。

2、调整旋转角度,使用按钮旋转望远镜,直到小指南针将望远镜指向北,然后按下 OK 按钮即可。

现在,你可以使用向上、向下按钮选择行星,确定好后按下 OK 按钮即可。它将显示选定行星的高度和方位角,指向它几秒后再转向北。

目前为止,项目就完成了。你会去寻找哪一颗行星呢?!

via

Revolution PI 如何安装新的镜像

本文将介绍虹科电子的工业树莓派产品Revolution Pi如何刷写系统。

所用到的镜像文件下载网址:

https://revolution.kunbus.de/shop/en/software

在您把新的镜像写入到您的RevPi Core之前,我们推荐您备份所有的重要数据。有多种保存数据的方法。在本教程中,我们将介绍我们认为最好用的一个。

您需要:

硬件

Ⅰ.您的电脑

Ⅱ.电源适配器

Ⅲ.USB2.0 A型插头转USB2.0 micro B型插头线缆

Ⅳ.U盘

软件

下载这些文件和程序并在您的PC上安装程序:

Ⅰ.镜像

Ⅱ. RPi Boot(Windows安装包)

Ⅲ. Win32 Disk Imager

让我们开始吧!

1.备份旧镜像

将 RevPi Core 的 mini USB 端口连接到 PC 上的 USB A 端口

打开 RPi Boot

将您的RevPi Core连接电源

RPi Boot现在开始搜索您的RevPi Core。接下来会打开以下窗口:

您的RevPi Core现在已经被识别。

点击“继续,但不要扫描”

打开 Win32 Disk Imager

接下来会打开以下窗口:

点击文件夹标志

选择用于镜像存储的U盘

在选择路径后面输入文件名。文件名必须以“img”结尾。

在下拉菜单中选择您的RevPi Core。仅显示驱动器缩写以供选择。如果您不知道是哪一个,则可以在资源管理器中查找它。您可以在“可移动存储设备”下找到您RevPi Core。它显示为“boot”。

点击“Read”。

您的镜像将会被备份。这个过程可能会持续几分钟。当文件创建成功后,您会收到确认信息。

2.安装 Jessie

请在下载镜像

解压下载的文件

打开 WinMD5Free

该程序从计算 MD5 校验值开始

计算出来的校验值将在几秒钟后显示

使用编辑器打开解压后的文件里的*.MD5文件。该文件的名称例如为2017-05-31-revpi-jessie.md5。

复制MD5值,并将其输入到“Original file MD5 checksum value …”框中,然后单击“Vertify”按钮。

当出现“Matched”对话框时,表示镜像文件正确。

但是,如果出现“NOT Matched”,则镜像错误。它可能在下载或复制时发生。您必须再次下载镜像,然后才能继续。再次开始安装Jessie。

打开 Win32 Disk Imager

在下拉列表中选择您的RevPi Core。仅显示驱动器缩写以供选择。如果您不知道它是哪一个,则可以在资源管理器中查找它。您的RevPi Core可以在“可移动存储设备”下找到。它显示为“boot”。

注意:

检查您是否正确选择RevPi Core。

如果选择错误的设备,数据可能会被破坏。

单击文件夹符号

选择您的镜像文件

点击“Write”

您的镜像现在将下载到RevPi Core。该过程可能需要几分钟。文件传输完成后,您将收到确认提示:

注意:

当USB插头连接到您的RevPi Core时,它处于闪存模式,无法重新启动至运行模式。请首先拔下USB线缆,然后重新启动RevPi Core。

如果您使用的是Stretch镜像,则在首次登录时会询问您使用的是哪个RevPi设备。

如果您正在使用RevPi Connect。镜像中将存储RevPi Connect所需的数据。如果您选择了错误的设备,则设备可能无法正常工作。

您需要登录一次RevPi设备。

首次登录时,登录名是pi,密码是raspberry。已为您的设备设置了德语键盘布局。如果您想要根据地区更改布局,您可能需要更改用户名:

各国键盘布局 用户名 德国/奥地利 raspberry 丹麦,英国,美国 raspberrz 法国,比利时 raspberrw

如果您使用的是Stretch,将首先询问您使用的是哪个RevPi设备。

输入橙色面板上显示的序列号和MAC地址。

1)MAC地址,(2)序列号

下次登录的密码会自动重置为 RevPi 侧面标签上的默认密码。

使用 sudo reboot 重新启动 RevPi。重新启动后,才能完全使用它。

关于虹科

虹科是一家在工业物联网IIoT行业经验超过3年的高科技公司,虹科与世界领域顶级公司包括EXOR、Eurotech、Unitronics、Matrikon、KUNBUS等合作,提供先进的高端工业4.0 HMI、高端边缘计算机、IoT开发框架、PLC与HMI一体机、OPC UA、工业级树莓派等解决方案。物联网事业部所有成员都受过专业培训,并获得专业资格认证,平均3年+的技术经验和水平一致赢得客户极好口碑。我们积极参与行业协会的工作,为推广先进技术的普及做出了重要贡献。至今,虹科已经为行业内诸多用户提供从硬件到软件的不同方案,并参与和协助了众多OEM的设备研发和移植项目,以及终端用户的智能工厂和工业4.0升级改造项目。

智能门锁:SLock 项目开发记录

本文转自 无垠,非常详细地记录了智能电子锁的制造过程。

碎碎念

花了一些时间,做了一款可以用手机来开门的门锁,从原理到最终的开发实现绝大部分工作都是我一人完成,一部分工作得到了老师的帮助,以及在赶项目的时候得到了@Leafer学长的支持与帮助,感谢。

其实这个想法从去年的六月份就已经提出来了,只是拖到了今年二月份才有机会实现它。这篇文章算是对这整个制作过程的一个记录,也算是一个总结吧。附上一张这个项目参加本地TEDx活动展示的照片。

注意,由于这个项目要拿出去比个赛,所以 对于这篇文章的所有内容,包括但不仅限于文字、图片、思路、代码(开源库除外)我均保留所有权利,并对侵权行为追究法律责任。

这么说来好像并没有什么人有空来侵权╮ (. ❛ ᴗ ❛.) ╭

但是这篇文章主体仍遵循知识共享-4.0协议,你可以在注明这篇文章的链接并且非商用的情况下自由地转载这篇文章。

扯远了_(:з」∠)_下面开始切入正题。

原理

这个项目最初的想法来源于我看到市面上一些指纹解锁门锁非常昂贵,动辄上千元,由此想到可以把现在都集成在门锁上的指纹识别部分移到手机上。这样,利用手机的强大能力,可以大大减少门锁成本,或许还能提高安全性以及可拓展性。

所以原理其实也很简单。一共三个设备构成完整流程:手机,门锁,以及一台公网上的服务器。手机与门锁均联网。

懒得画流程图了,我尽量说得简单点。详细技术细节看下一节吧。

首先在手机上选择要打开的门锁,随后输入该门锁的密码。服务器验证通过后用一些参数生成一串密钥,MD5之后扔给手机。

手机收到该密钥后以此为内容生成一个二维码,在屏幕上显示出来。门锁利用摄像头扫描这个二维码,获得密钥后与扔给服务器进行比对。如果和此前MD5后的密钥一致,服务器就通知门锁开门。

这种方案有一些优点。比如可拓展性强,后期可以拓展多种解锁方式,如密码,图案,或者最初设想的指纹,甚至面部识别或者两步验证。同时通过一些手段也可以保证安全性。重点是第一台原型的成本也只有500元左右,大大减少了成本。

在实现这一方案的过程中,我看到了别人做出的有一些相似的方案,是固定二维码贴在门锁旁边,手机扫码解锁。我想这样会带来与共享单车一样的问题:二维码一旦被篡改就无法解锁,甚至会带来危险。由于这一点,最后我坚持了动态生成二维码,由门锁扫描的方案。

实现过程

当然用单片机。由于要联网,还要扫描二维码,我选择了树莓派作为门锁的核心设备。

↑超乱的灵魂走线…

然后在本来最纠结的锁芯方面有幸得到了老师的帮助,没有用电磁锁,而用了一个带电机的传统锁。唯一缺点就是用钥匙开锁时转动阻力实在太大,而且电机驱动稍稍慢了点。凑合着用吧。

在手机如何与门锁通信本来也非常纠结。最初的方案其实是用声波进行通信。手机把密钥转换成声波播放,门锁进行识别。

最后发现这一方案有一些限制。我使用了 http://rest.sinaapp.com 这一开源库,但它的文档实在有些简单了。好不容易折腾出来,却无奈发现在一些环境下效果实在不好。最终放弃,想了半天决定使用二维码。

关于在手机上用什么技术实现,按原本指纹识别的方案是需要APP的。然而不会写。所以转而使用已经足够强大的HTML5,美其名曰“轻量优雅”。解锁方案就先改成密码解锁和图案解锁(类安卓),反正只是个DEMO嘛。

在安全方面,我对解锁的核心,即解锁密钥做了诸多限制。首先每一把门锁在某一刻只能有一串密钥,且每一串密钥的存活周期为一分钟,过期即失效。

同时我使用了账户登录制度,密钥归档于各个账户下。当账号登录时,前端网页就会以非常密集的频率重复发送简短的请求(我把它称为伪·心跳包)。一旦一个账号一段时间没有发送该请求,后端就会让该账户下的所有密钥失效。

以及,我在服务器上开启了HTTPS和HSTS,同时使用了更安全的ECC证书,配置了更安全的加密算法。

而且,服务器端会拒绝所有非浏览器请求(虽然可以模拟,但毕竟多防一点是一点嘛)。

我还在前段页面偷偷摸摸埋了几个 地雷 触发点。现在先收集点数据,下次有空了加上区分人机行为的功能好了(然而现在还没有2333)。

还有,门锁端与服务器的通信采用了与前端不同的域名(虽然是同一台服务器)以及自定义的UA,还是那句话,多防一点是一点。通过这些制度,我把我能想到的所有破解方式全部ban掉了。当然,如果你能发现什么漏洞,欢迎告诉我,感谢!

当然肯定不会忘了SQL注入和XSS漏洞,至少尽力了。

然后就没有什么大问题了。于是上手。

开发分成三部分。一部分是服务器上的后端和手机上的前端,一部分是门锁上的程序,还有是硬件布局。

先说前端和后端吧。其实有了思路也很简单了。后端用了PHP 7,开发简单而且据说性能不错。伪·心跳包和过期密钥处理上用了Python,一个死循环处理数据库而已。前端用AJAX实现前后端分离,而且保证了全部流程只刷新一次页面(登录需要刷新。虽然可以不刷新,但是懒)。本来想用这个项目练练vue的,结果发现来不及了。先写死了代码,以后再说吧。

前端用了一个非常棒的开源项目MDUI(http://mdui.org),模拟了Material Design效果,配上个Frameless的浏览器简直就 像 是个APP。

对于如何在解锁完成后在手机上有所反馈的问题,直接用轮询服务器的方式暴力解决。正好有伪·心跳包,就搭了顺风车,用伪·心跳包查询是否解锁。

前端后端就这么不负责任地扯完了。然后是门锁上的程序。

更简单,一个死循环而已。读取一个超声波传感器的值,如果发现有手机在门锁前面(超声波传感器读取距离变小),就联系服务器,如果有密钥待验证,就用与超声波传感器在同一平面内的摄像头拍一张照片。如果没有读取到二维码就进入下一次循环,反之读取二维码与服务器验证。如果正确就叫电机开门,延时一会儿再锁门,然后进入下个循环。

特写来一发。

其实本来是想用循环检查服务器上有没有密钥,有的话再拍照的,然后发现这对服务器来说有点累2333所以加上了超声波传感器。

最后来说说硬件布局。

一定会有人发现头图里面有一块Arduino板,然后奇怪地发现上面扯了这么多却只字未提Arduino。事实上我真的没有用到Arduino的计算能力,纯粹是因为电机要额外供电而我手头没有可以用跳线供电的线,所以机智地用Arduino把5V输入转换成了跳线接口。

你看只连了电源输出↓

还有一些跳线也看起来很奇怪,它们连到了线路板的螺丝孔里…那是为了把这些模块固定到面包板上。

啊…我都佩服我自己的机智(*/ω\*)。

剩下的结构其实也很简单了,只是线一多就乱了。主要是树莓派控制HC-SR04超声波传感器,电机以及摄像头,Arduino板给电机供电。摄像头为了保持小巧及低成本,用了排线的版本。

然而还有坑。

是直流电机的问题。作为一个如假包换的直流电机,这个电机通过切换正负极来改变旋转方向。所以要用H桥。

(图源网络)

很明显,切换不同对角线上开关的闭合就能改变中间电机两端的正负极。

但是无论是H桥芯片还是H桥模块我都没有_(:з」∠)_

但是正好手头有一个双路继电器模块。

于是拿它做了一个大号简易版H桥。原理差不多。

唯一的毛病就是如果一不小心两边同时闭合就会Boom。所以改了连接和代码。首先把接地一端都接在继电器常闭端,同时在代码逻辑上总是先把两边同时切到接地端再进行其他操作。这样就尽量避免了短路问题。

越过了这些坑,我最后对整个布局改进了一下。其实就是加了个红色LED作为视觉反馈,顺便也方便了开发时勘误。

到这一步,整个项目就基本上完成了。这是树莓派端的完整Python脚本:

# -*- coding:utf-8 -*- import time import RPi.GPIO as GPIO import urllib.request from PIL import Image import os, signal, subprocess #初始化 GPIO.setmode(GPIO.BCM) #超声波 GPIO.setup(24, GPIO.OUT) GPIO.setup(23, GPIO.IN) #LED GPIO.setup(25, GPIO.OUT) #继电器 GPIO.setup(8, GPIO.OUT) GPIO.setup(21, GPIO.OUT) #超声波读取距离函数 def checkdist(): GPIO.output(25, True) time.sleep(0.03) GPIO.output(25, False) GPIO.output(24, GPIO.HIGH) time.sleep(0.000015) GPIO.output(24,GPIO.LOW) while not GPIO.input(23): pass t1 = time.time() while GPIO.input(23): pass t2 = time.time() return (t2-t1)*340/2 #开、关门函数 def downPower(): GPIO.output(8, False) GPIO.output(21, False) def openDoor(): GPIO.output(21, True) time.sleep(3) GPIO.output(21, False) def closeDoor(): GPIO.output(8, True) time.sleep(3) GPIO.output(8, False) #二维码读取函数 def lesen(): #拍摄一幅图像 os.system(“raspistill -w 640 -h 480 -o /home/pi/cameraqrc/image.jpg -t 100 “) print (“raspistill finished”) #处理图像以方便读取 im = Image.open(“/home/pi/cameraqrc/image.jpg”).rotate(180).convert(“L”).save(“/home/pi/cameraqrc/image-1.jpg”) GPIO.output(25, True) time.sleep(0.1) GPIO.output(25, False) #读取二维码 zbarcam=subprocess.Popen(“zbarimg –raw /home/pi/cameraqrc/image-1.jpg”, stdout=subprocess.PIPE, shell=True, preexec_fn=os.setsid) qrcodetext=zbarcam.stdout.readline() return qrcodetext #主函数 def havePhone(): urlc = “https://xxx.flyhigher.top/checkkey/?lock_id=test001” #才不告诉你们真实地址嘞 content = urllib.request.urlopen(urlc).read().decode(“utf-8”) print(content) if content == “true”: result=lesen().strip().decode(“utf-8″) print(result) if result != ”: headers = { ‘User-Agent’ : ‘Lock/Beta1’} urld=”https://xxx.flyhigher.top/ifkey/” #才不告诉你们真实地址嘞 pdata={‘lock_id’:’test001′,’passw’:result} pdata=urllib.parse.urlencode(pdata) binary_data = pdata.encode(‘ascii’) print(‘Checking!’) req = urllib.request.Request(urld, binary_data, headers) fd = urllib.request.urlopen(req).read().decode(“utf-8”) print(fd) if fd == “test001”: print(“开门”) downPower() openDoor() time.sleep(7) print(“关门”) downPower() closeDoor() else: print(“Wrong!”) else: print(‘Continue!’) #方便调试时关机 elif content == “die”: print(‘Yes!’) os.system(“sudo shutdown”) #主循环 while True: dis = checkdist()*100 print(dis) if dis <= 30: havePhone() time.sleep(0.5) 其他代码这么多我就不放了。你来打我呀略略略╮ (. ❛ ᴗ ❛.) ╭ 有空就放运行时的动图吧… 更新,ToDo List: 用Vue重构前端 改用更好的密钥生成算法 重新测试以发现可能存在的漏洞 加入两步验证功能 加入开门记录功能 加入习惯分析功能 加入短信/邮件告警功能 加密数据库 更多安全特性 总结 感觉还是很棒的,接下来我会对它加入一些拓展,比如新的解锁方式、远程开门、优化流程、优化硬件布局以及增强安全性,拓展它的实用性。 以及,参加TEDx的时候有很多人建议我申请专利,估计很快就会落实(液! 这个项目也让我有了很多收获。第一次接触了Vue.js,但是遗憾最后没有应用;第一次尝试使用没有mysql扩展的PHP7开发后端,用熟了mysqli;自认为对硬件开发和树莓派初步入了个门;对Web安全有了更深刻的了解,未来可能会加上更高级的安全特性。当然,这个项目也得到了一些人的帮助,感谢他们! 然而估计很快就会开硬件方面的新坑… 本文链接:https://flyhigher.top/develop/408.html 本文采用 CC BY-NC-SA 3.0 Unported 协议进行许可。

树莓派 + AI 魔改贪吃蛇——与蛇共舞

本作品由 大飞品树莓 分享在 MAKE 趣无尽 上,不仅介绍了使用百度 AI 实现身体姿势控制贪食蛇运动所需要的程序搭建,还提供了配置好了的系统镜像文件,准备好必要的硬件、烧录好系统镜像之后可以立刻体验。

作品介绍

参加贪吃蛇魔改大赛作品,基于pgzero1.2中example的snake作品,结合百度AI人工智能平台中人体关键点分析,小蛇吃苹果,我来做运动,我与小蛇共舞。通过手的围绕身体进行转动,控制小蛇的运动方向。

1、运行平台:树莓派4B+摄像头或者安装 python、opencv、mplayer 等工具的PC机

2、久坐的程序员需要站起来运动了,运行程序,通过手腕上下左右移动,控制贪吃蛇的运动方向,与蛇共舞,放松筋骨

3、代码托管地址:https://gitee.com/shiranfei/Adapted-game-ai_snake

软件架构

一、贪吃蛇程序采用pgzero1.2中example的snake例程。

pgzero1.2 链接:

https://github.com/lordmauve/pgzero

pgzero的使用官方文档:

https://pygame-zero.readthedocs.io/en/stable/

二、百度AI人工智能平台人体关键点分析,使用史然飞的《中学生都能玩的人工智能》中对百度AI进一步封装库。

参考链接:

https://gitee.com/shiranfei/open_course_for_AI.git

《中学生都能玩的人工智能》是史然飞(就是我啊)基于树莓派和百度AI定制的人工智能实验课,可以体验当前深度学习能完成的事情和其效果,基于开发平台的API,省略了模型建立和调参的复杂过程,可以快速、的制作智能产品,智能化我们的生活。

三、程序由三大块组成:使用摄像头分析我们的姿态程序、标准贪吃蛇程序、音乐播放程序

1、使用摄像头分析我们姿态的程序,读取摄像头的图片,然后发给百度AI进行分析,返回人体姿态,通过姿态信息里手臂、头部和肩膀的关系,得到方向控制键:上下左右,然后通过socke发送给标准贪吃蛇程序socket:127.0.0.1:20163。通过测试,发现在树莓派和PC上,百度AI的分析速度基本为2帧/秒。

2、标准贪吃蛇程序,在pgzero1.2的snake基础上,新建了一个进程,完成从127.0.0.1:20163中读取人体姿态分析后的方向控制键,然后更新小蛇的运动方向。

3、播放音乐程序,这个程序是后加的,发现当前在标准贪吃蛇程序中,调用music模块播放音乐有问题,当前未找出问题,所有采用折中方式,新建一个进程专门播放音乐。

4、2020-07-19,当前版本程序,完成摄像头捕捉人体姿态,通过人体姿态完成对小蛇的控制,同时可以播放音乐。

后续待添加功能:

1、解决pgzero中运行music长时间播放异常的问题。

2、添加滑动手臂,更换播放音乐的效果。

3、添加通过语音控制开始游戏和结束游戏。

4、项目退出问题,当前程序已后台运行,要退出需要手动kill 项目相关进程号,所以当前退出需要重新启动树莓派。

安装教程

一、基于树莓派4B的安装教程

1、安装系统镜像,镜像下载:

链接: https://pan.baidu.com/s/1ZV7GTGgsclECiej3v4ifWg 提取码: ubjs

这个系统已经安装好了针对树莓派 4B 的,opencv、百度 AI 等各种库。

2、fork本项目,点击桌面的终端,打开终端,在/home/pi中输入:

git clone https://gitee.com/shiranfei/Adapted-game-ai_snake.git

即可获取项目

进入 /home/pi/Adapted-game-ai_snake 目录下,输入:

sh run_snake.sh

即可开始本项目的体验。

二、基于PC机的安装教程

1、我的PC机为ubuntu20.04(64位),安装Anaconda3-2020.02-Linux-x86_64.sh

在anaconda3中,安装opencv、pgzero、thonny、baidu-aip

ubuntu系统中安装mplayer工具

2、fork本项目,点击桌面的终端,打开终端,在自己的目录下中输入:

git clone https://gitee.com/shiranfei/Adapted-game-ai_snake.git

即可获取项目

进入 Adapted-game-ai_snake 目录下,输入:

sh run_snake.sh

即可开始本项目的体验。

使用说明

一、新建百度AI的人体分析应用,获取人体分析:AppID、API Key、Secret Key三个关键参数,更改camera_get_direct.py中的对应参数,例如我的参数为:

“” 与蛇共舞的人体关键点分析,需要更改为自己的api接口 “”” pic_APP_ID = ‘21414508’ pic_API_KEY = ‘l5XEnXQePmookhlAM9ORkD8O’ pic_SECRET_KEY = ‘hwEuXHLja7U03Zfj1FkI08sNkLiy56QY’

将程序中对应的参数,更换为您的即可。可以提高分析速度,如果好多人同时使用我的API体验时,百度API的分析速度会下降好多。

二、运行程序,在树莓派和基于ubuntu的PC上,输入:

sh run_snake.sh

即可开始体验本项目。

三、控制小蛇变方向

1、小蛇向上走,双手合并,举过头顶,即可控制小蛇向上走。

2、小蛇向左走,双手合并,在左肩的左边,即可控制小蛇向左转。

3、小蛇向右走,双手合并,在右肩的右边,即可控制小蛇向右转。

4、小蛇向下走,双手合并,在在肩部的下边,即可控制小蛇向下走。

工业树莓派:虹科RevPi DIO模块功能测试

RevPi 数字IO模块有三种版本,均可以通过PiBridge与Core模块直接相连。它们的前端都具有相同的28针I/O连接器。除了具有14个数字输入和14个数字输出的标准版本外,还有两个特殊版本,它们仅具有16个数字输入或16个数字输出。根据EN 61131-2的要求,所有版本都有抗干扰保护,并且可以在-40°C到55°C的温度范围,相对湿度高达93%的环境内运行。此外,所有数字IO模块都具有UL认证(UL文件号E494534)。

输入和输出的开关状态通过PiBridge与RevPi Core的中央处理映像进行周期性数据交换。除了切换状态之外,它还可以周期性地传输可能的错误状态(诊断数据)和配置数据。RevPi DIO模块还配备了PWM(脉冲宽度调制)和计数器输入,可以根据需要单独为各个输出激活PWM功能,为各个输入通道激活计数器功能。

本文将借助一个LED灯和一个按钮,进行DIO模块的简单实操,测试其控制输出状态、读取输入状态、PWM输出模式以及输入端口计数器的功能。

所需硬件:

PC

RevPi Core模块一个

RevPi DIO模块一个

24V电源

PiBridge连接帽一个

LED灯及电阻各一只

按钮一个

RJ45连接线一根

路由器一台

所需软件:

Advanced IP Scanner

Putty

1.模块连接

通过PiBridge连接帽,将Core模块和DIO模块连接起来,并接好电源线。注意DIO模块顶部有额外的X2插头用于供电,从而使得模块具有电流分离的输入和输出,可以使用独立的电源进行供电,当然也可以连接在X4插头的电源上。

图1-1 模块连接

根据DIO模块的输入输出端口分布图,分别将LED灯正极和按钮分别接在Output_1和Input_1端口,LED负极接电源负极,按钮另一端接电源正极。(注意LED灯应串联一个限流电阻,防止电流过大,烧坏元件)

图1-2 LED及按钮连接

2.Pictory配置

将Core模块通过RJ45端口连接到路由器上并上电后,从位于同一局域网的电脑端进入Pictory界面(在电脑浏览器输入Core模块的IP地址即可,可通过Advanced IP Scanner获取Core模块的IP地址)。

从界面侧边栏拖拽出DIO模块并放置在Core模块的右侧(若在连接实物时将DIO模块连接到了Core模块的左侧,请按实际情况配置)。

图2-1 Pictory模块配置

在界面右下角将I_1改为Button,将O_1改为LED。点击File->Save,然后点击Tools->Reset Driver。

图2-2 变量名称更改

3.配置输出端口状态

打开PuTTy软件,输入Core模块的IP地址,选择端口22和SSH连接方式,建立远程连接,根据Core模块侧面标签上的用户名和密码登入系统。

调用piTest -r命令,首先读取当前LED端口的输出状态(Ctrl+C停止读取):

图3-1 读取当前输出状态

读取到过程映像中LED(即Output_1端口)的当前值为0,即当前端口输出低电平,此时LED灯未点亮。利用piTest -w命令向LED写入1,使其输出高电平,成功点亮LED灯。

图3-2 更改输出状态

图3-3 点亮LED

4.读取输入端口状态

调用piTest -r命令,读取Button的值,并在读取的过程中按下按钮,查看其值的变化:

图4-1 读取输入端口状态

可以看到,当按下按钮时,该输入端口接入高电平,因此读取到的数值为1。松开时,又恢复为0。

5.PWM输出

进入Pictory界面,在右下角Value Editor栏中,进行以下更改:

图5-1 激活Output_1的PWM功能

上图中OutputPWMActive值设为1,表示激活O_1(即LED)的PWM功能,若要激活O_1和O_2的PWM功能应将此值设为3,即二进制的11。OutputPWMFrequency可以设置PWM的频率,这个频率对于所有的输出端口均有效,后面的百分数表示设置占空比的步长。

Save并Reset Driver,通过PuTTy软件,依次输入以下命令:

图5-2 PWM占空比设置

上图的命令分别表示输出占空比为20%、50%和100%的PWM波。此时LED灯的亮度会有所不同,占空比越低,亮度越低。下图展示了不同占空比时LED灯的亮度,由于拍摄原因区别可能不是很明显,但肉眼直接观察实物的话可以很明显看出不同。

a.占空比为20%

b.占空比为50%

c.占空比为100%

图5-3 LED亮度对比

6.输入端口计数器功能

进入Pictory界面,进行以下配置:

图6-1 启用Input_1的计数器功能

选择InputMode_1(即1号输入端口)的工作模式为计数器,上升沿触发,Save并Reset Driver。计数器的数值将存储在变量Counter_1中(可以在pictory界面修改变量名称),通过piTest -r命令不断读取Counter_1的值,并在此过程中尝试点按按钮,观察变化。

图6-2 计数器功能测试

可以看到,每按下一次按钮,Counter_1的值便会增加1。

7.总结

以上就是本次实操的全部内容,本文成功测试了RevPi DIO模块的基本功能,包括读取并转换输出状态、读取输入状态、输出端口的PWM功能以及输入端口的计数器功能。

要了解更多工业树莓派的相关内容,请访问https://www.hohuln.com/rev-pi/获取更多信息。

关于虹科

虹科是一家在工业物联网IIoT行业经验超过3年的高科技公司,虹科与世界领域顶级公司包括EXOR、Eurotech、Unitronics、Matrikon、KUNBUS等合作,提供先进的高端工业4.0 HMI、高端边缘计算机、IoT开发框架、PLC与HMI一体机、OPC UA、工业级树莓派等解决方案。物联网事业部所有成员都受过专业培训,并获得专业资格认证,平均3年+的技术经验和水平一致赢得客户极好口碑。我们积极参与行业协会的工作,为推广先进技术的普及做出了重要贡献。至今,虹科已经为行业内诸多用户提供从硬件到软件的不同方案,并参与和协助了众多OEM的设备研发和移植项目,以及终端用户的智能工厂和工业4.0升级改造项目。

用树莓派制造智能萌宠喂食机

MAKER:vermeerenmaxime/译:趣无尽 Cherry(转载请注明出处)

如果家有萌宠,看到这个项目是否心动呢?自己动手做一个自动喂食器吧!它可以更加精准地掌握主子们的饭量,帮助你监管主子们的饮食,让它们健康成长!

项目特性:

自动检测碗的重量,当碗里的食物少于25克,就会自动喂食。

LED 可在黑暗中点亮,来提供照明。

借助 SmartPET,记录宠物近期的饮食情况,并计算宠物的饭量是否在合适的范围。

制作过程中所用到的 BOM 清单、前端、后端源码、数据库文件,请访问 GitHub 库下载:

https://github.com/vermeerenmaxime/smartpet

材料清单

树莓派 ×1

电机 ×1

重量传感器 TAL220 ×1

光传感器 LDR ×1

MCP3008 ×1

超声波传感器 HY-SRF05 ×1

加载模块 HX771 ×1

LED 显示器 16×2 ×1

电位器 ×1

RGB LED ×1

电源 ×1

10k 欧姆电阻 ×1

1k 欧姆电阻 ×1

220 欧姆电阻 ×4

木板 ×1

玉米片分配机 ×1

长螺丝 ×16

短螺丝 ×4

合页 ×1

固定合页的螺丝 ×6

烙铁 ×1

强力胶水 ×1

锯子 ×1

钻头 ×1

硬件部分

电路图如图所示,以此搭建电路。

电路中有三个传感器(LDR,超声波和重量传感器)和三个执行器(电机,RGB LED 和 LCD 显示器),请如图将它们安装到位。

我已经在多个面包板上搭建了我的原型。

制作底座和容器

1、画好形状,切割木板,用来放置玉米片分配机。

2、使用铁丝将电机安装到分配器上。如图所示,铁丝在分配器的转向盘上拉动以便其旋转。

3、确保铁丝穿过电机的孔并安装到位。

4、在底座里加了一些木头,在中间放置电机。

5、在外壳上切割一些孔,以安装 LCD 显示屏,超声波传感器、LDR 和 RGB LED。

6、在背面添加了一个合页,用来打开机器,并将电源连接到电源插座。

温馨提醒:制作时请注意安全并带上护目镜。

安装树莓派

1、将电线连接到树莓派。连接好后,打开终端(mac)或 Windows Power Shell(Windows),树莓派就准备好了。

2、将树莓派连接到互联网,然后等待获取 IPv4 地址。之后,你无需电线就可以通过 Internet 连接到该地址。

创建并配置数据库

1、打开 config.py 文件,并使用数据库正确配置。

2、你可以使用一些虚拟数据导入我的数据库,以便项目正常运行。

3、在 /data 文件夹 “database.sql” 中找到该数据库。

4、数据库的创建方式支持多个传感器和执行器升级 SmartPET 项目。

这里所用到的数据库 SQL 文件可以在项目文件库中下载。

https://github.com/vermeerenmaxime/smartpet

软件设计

该项目使用 Python、Flask、SocketIO 和 Javascript 编程实现。

1、使用 Adobe XD 制作框架。

2、设计制作 HTML 和 CSS,并添加了一些基本的 Javascript 以便设计能够正常工作。

我使用 Flask 中的路线来在网站上获取大部分数据。

这里所用到的前端、后端源代码可以在项目文件库中下载。

https://github.com/vermeerenmaxime/smartpet

创建服务并运行

1、创建好服务,以便树莓派在启动时自动运行代码(app.py)。

你可以点击以下链接,了解如何在树莓派中创建服务。

Linux 下使用 systemd 设置开机启动项

2、smartpet.service 在 /service 文件夹中。

3、现在可以将树莓派和外部电源插入并运行项目!

到此为止,一台自动喂食机就搭建好了,希望你喜欢。

via

DIY 斯坦福 Pupper 12 自由度四足机器狗

不知道您是否曾经被波士顿动力的机器狗视频刷过屏,是否曾经梦想自己也能亲手玩弄一下最前卫、科技感十足的12自由度机器狗?现在机会终于来了!

斯坦福Pupper是一个小型化的四足机器人,能跑能跳能遛弯。亲民的价格和简单的设计可以让高中及以上机器人爱好者自己动手DIY一个有趣能动的四足机器人。

可以用游戏手柄控制Pupper的移动方式和目的地。Pupper内部的树莓派会接收到控制器的命令后,控制伺服电机的运动(每条腿三个),从而以正确的运动方式走到正确的位置。

Pupper被设计为“黑客入侵”模式,希望用户能够根据自己的内心需求调整和扩展机器人的行为。尽管机器人可以开箱即用,但您可以添加的一些功能包括不同的步态(约束,奔跑等),如叼东西或跟着你走等高级行为。您还可以在操作真实Pupper之前,在PyBullet中模拟Pupper的运动。

让我们开始Pupper之旅吧。首先查看如下的物料列表及组装手册。所有物料如果从美国买,估计$1000左右。你也可以在某宝以很大的优惠价格购买到所有物料及组装好的 Pupper。如果您对 Pupper 有兴趣,但也担心自己的组装能力,建议先购买一个组装好的,然后再慢慢研究,会更容易些。购买链接、所有的代码和设计文档见文末。

概要

为了让组装简单有趣,需要烙铁焊接的物料,我已经提前做了焊接,组装过程中不需要用到烙铁。下图所示为组装好的Pupper和未组装的所有物料示意图。

关于成本,如果从美国购买组装物料,成本低于$1000的可能性很小(还不包括损耗),最让人心急的是快递时间,赶上疫情,快递的时间鬼神莫测。好在笔者已经在国内打通了供应链,所有物料都可以快速搞定,详细见后面的连接。

建议先从笔者提供的连接购买组装好的Pupper,上手快,也方便练习拆解与组装;

第一次DIY不建议使用胶水,熟练后再上胶水,否则后悔莫及;

如果已经下定决心自己组装了,请参考如下的组装说明,祝君好运!

开启组装之旅

步骤1. 安装伺服码盘

1.1. 使用伺服臂(不是码盘)扣在伺服上使伺服处在中间位置

1.2. 安装伺服码盘,让码盘的孔位大概在45度位置(见下图)

1.3. 逐步把M3x6mm螺钉拧紧,让码盘和伺服融合在一起

1.4. 一些码盘的质量较差,拧螺钉时比较费劲。注意来回微调码盘和伺服轴的位置,找到适配角度就会比较容易。拧螺钉的过程中,注意观察不要过度拧紧,否则会损坏伺服。

步骤 2. 连接码盘和大腿根伺服内框

按照90°角度连接,并拧紧M3x8螺钉(如图所示 ),组装前,过程中及后的示意图(注意左右腿的方向)

步骤3. 安装大腿根内框伺服

3.1. 将伺服电机放入内框,然后轻轻摆动,使伺服轴从内框的大圆孔中伸出

3.2. 伺服左侧使用M4x10mm 螺钉,伺服右侧使用M3x16mm 螺钉

3.3. 把M3x16mm螺钉拧入连接柱

组装示意图(注意螺钉的位置)

步骤 4. 安装大腿根内侧伺服臂

4.1. 将伺服转到中立位置,然后以所示角度(向下45度)滑动伺服臂

4.2. 在伺服臂上侧拧入M3x8mm 螺钉,在边上拧入M2x8mm 螺钉,固定伺服臂

组装示意图

步骤 5. 腿部

按照如下示意图把物料摆放好后安装,顺序分别是,带肩螺栓,分体式轴承,下部小腿,分体式轴承,上部大腿,锁紧螺母。

步骤 6. 连接大腿和伺服臂

6.1. 将上肢大腿的弯曲边缘与伺服臂对准。通过碳纤维上预留的孔拧入M3x6螺钉。

6.2. 特别要检查距离伺服最近的螺钉要垂直拧入,防止和外部伺服臂刮蹭,发生刮蹭的另一个重要原因是支柱拧的太紧,3D打印件硬度有限,不能过度拧紧。

步骤7. 大腿根外部

将伺服放入3D打印的框中,并用两个M4x10mm螺钉加固定,组装示意图如下。

步骤8. 大腿外侧伺服安装

8.1. 将伺服臂调整到其中间位置,然后如图所示以45度角固定伺服臂。

8.2. 伺服臂的固定参考之前步骤.

组装示意图

步骤9. 连接大腿根内外部

9.1. 对齐内外部组件,M4x10mm螺钉应在同一侧,伺服臂应成90度角。

9.2. M3x16 螺钉拧入支柱内,不要用力过猛,防止损坏。

9.3. 此时,上下腿可能会开始移动,可以标记左右两侧,以免感到困惑。如果不知道哪一边,请与3D进行比较:

https://stanford195.autodesk360.com/g/shares/SH919a0QTf3c32634dcfedf61e031f673710

示意图

步骤10. 加入另外2个支柱

用4个M3x10mm螺钉分别固定另外2个支柱,示意图如下。

步骤11. 测试每个伺服器的整个运动范围

11.1. 离身体近的伺服臂应从45度向上移动到完全接触支柱

11.2. 离身体远的伺服臂应从向上接触支柱到向下倾斜45度

步骤12. 组装大腿延长杆

均等地拧紧杆端,直到杆上最远的孔间距与上腿连杆上的孔(伺服臂中心到最后一个碳钻孔点)相匹配为止 ,请参阅图片。

步骤13. 将延长杆连接到伺服臂

从内侧(注意分清左右腿的内侧),用M3x10螺钉将延长杆固定到伺服臂上。

步骤14. 将延长杆连接到小腿

将M3x10螺钉穿过碳纤维件,然后穿过杆端,使用内六角扳手拧紧时,使用扳手将M3防松螺母固定到位。

关键的骨架已经完成,后续身体部分的组装就是“面子”工程了,颜值当道的时代,面子工程不容小觑!

步骤15. 将轴承压入指定空位

将两个轴承压入最前面3D打印支架的两个孔中(称为“前前部”),将另外两个轴承压入后面一块的两个孔中(称为“后前部”)。

步骤16. 固定大腿部

16.1. 用M4x8螺钉把腿部件固定在身体支架上

16.2. 用M3x8 螺钉穿过轴承拧入腿部的支架螺钉孔中

步骤17. 把组装好的腿/身体支架固定到身体底部碳纤维板上

用16个 M3x6 螺钉把之前组装好的部件固定在底部碳纤维底板上。

步骤18. 组装树莓派板子

18.1. 参考上面类似的步骤把树莓派固定到3D打印件上。

18.2. 用固定绑带把树莓派固定到底部碳纤维板上。

步骤19. 组装电源板,连接伺服到电源板

19.1. 把电源板插入树莓派板子上(注意插针方向,伺服的J1J2…J12和电源板上的J1J2…J12一一对应)

19.2. 按照示意图把伺服带的杜邦线分别插入电源板的对应位置,注意线序

19.3. 把变压器连接电源板

示意图

大功告成

尽情 play 吧!

哪里购买物料?

下面的链接是BOM list:

https://docs.google.com/spreadsheets/d/1zZ2e00XdzA7zwb35Ly_HdzfDJcsxMIR_5vjwnf-KW70/edit#gid=963689194

如果想便宜并节省时间,强烈推荐通过本站的淘宝连接一站式购买所有物料:

http://link.nxez.com/buy/stanford-pupper

组装手册

如下是英文版本的组装手册:

https://pupper.readthedocs.io/en/latest/guide/assembly.html

设计文档

如下链接是 Fusion 360 CAD model:

https://stanford195.autodesk360.com/g/shares/SH919a0QTf3c32634dcfedf61e031f673710

如下连接是电源板PCB文件:

https://github.com/stanfordroboticsclub/Pupper-Raspi-PDB/

Pupper源代码

主仓库链接如下:

https://github.com/stanfordroboticsclub/StanfordQuadruped

根据里面的README可以创建环境,创建的过程中,还会用到如下仓库:

https://github.com/stanfordroboticsclub/PupperCommand

https://github.com/stanfordroboticsclub/PS4Joystick

产品页面:http://www.mangdang.net/page5

拔掉 MacBook,用 8GB 树莓派来办公的体验如何?

5 月底树莓派新推出 8GB 内存版本,售价 75 美元。这款新的树莓派到底香不香? Youtube 博主 Jeff Geerling 萌生了一个大胆的想法:在某个工作日,拔掉自己的 MacBook Pro,插上新买的 8GB 树莓派 4B 作为主要的工作电脑,看看一天下来是什么感觉。

我们知道,工作日可不仅仅是发发博客、远程写代码那么简单。如果只是这样,随便一个 Chromebook、平板或便宜的旧式笔记本就能搞定。除了这些,Jeff Geerling 所指的工作日内容还包括:

使用专门的 app 浏览推特;

使用 Slack(Slack 使用的内存比 Jeff Geerling 运行的大多数其他应用程序在任何给定的时间加起来都要多);

录制、编辑音视频;

使用 Docker、Ansible 和 Kubernetes 实现一些基础结构自动化。

他将整个过程录成了一个视频上传到 Youtube,浏览量已经过万。

一天下来,Jeff Geerling 发现,假如你的日常工作是大量的命令行工作、编程、使用 git、偶尔上上网的话,Raspberry Pi OS 确实是一个颇具性价比的选择。然而,将其作为真正的工作电脑还是有点痛苦的,因此他在一天之后就放弃了这个想法(本来打算多坚持几天)。

他将自己这一天的实施步骤写成了博客,一起来体验一下。

Jeff Geerling:我用 8GB 树莓派替代 MacBook Pro 的一天

第一步:插入设备

当天的首要任务是从我的 CalDigit TS3 Plus Thunderbolt 3 集线器上拔下 MacBook Pro 的插头,然后弄清楚如何将所需的一切插入树莓派。

我将 AmazonBasics 驱动的 USB 3.0 集线器插入了树莓派。我选择了一个 powered hub,以防止树莓派的内部总线要为所有设备供电,其中包括:

一个 Kensington 240 GB SSD,装在 Inateck USB 3.0 SATA 机箱中。

苹果魔术键盘。

苹果魔术触控板。

Behringer U-Phoria USB 3.0 音频接口。

Logitech C920 网络摄像头。

你可能没有意识到在换电脑时会产生多少杂乱的电缆。

我插入了官方的树莓派 4 USB-C 电源和一个微型 HDMI 转 HDMI 适配器,该适配器已插入我的 LG 4K 27 寸显示器,然后等待树莓派启动!

第二步:重新设置

我做的第一件事是花了近 30 分钟弄清楚如何在所有的应用程序和系统控件中以一致的字体大小获得 4K 画质(在 30Hz 的频率下,树莓派无法通过其 HDMI 连接输出 60Hz)。

外观首选项中的设置似乎适用于某些 window chrome 和按钮,但是不适用于应用程序内部。因此,在 4K 分辨率下,当我增加字体大小之后,文件管理器的主窗口文本变得可读。但是为了让文件名和其他列表可读,我必须进入文件管理器的设置,增加字体大小。

接下来,我启动了「像素倍增(Pixel Doubling)」功能,如此一来,原来的 1 个像素会以 2×2 的像素区块搭建,进而让所有内容尺寸精确两倍,这使得树莓派可以在 4K 显示器上运行。

如果你想玩游戏或看视频的话,这样就足够了,当然,4K 设置下看视频会有一些轻微的撕裂。而计算机上的其他内容则会以 1080p 的分辨率呈现。

最后,经过长时间的设置,我还是决定坚持原始的 1080p 分辨率,尽管它让我的显示器显得有些过时了。这么做是为了:

减少树莓派 GPU 的负担(因此撕裂更少);

让树莓派的 GPU 可以应用抗锯齿功能;

允许 60Hz 的刷新率,这使我在观看 60fps 的视频时眼睛更舒服。

在这段时间里,我还不得不放弃使用苹果魔术触控板,因为即使在调整了许多设置后,跟踪也没有非常精准。感觉就像触控板喝醉了。

我直接将其插到了树莓派中,但仍然遇到同样的问题。因此,我改用在办公室使用的旧罗技鼠标,效果更好。

第三步:工作流程及 app

我开始寻找日常使用 app 的替代品,结果有好有坏。Chromium 是一款不错的浏览器,用起来没什么不爽。VSCodium 是一个不错的代码编辑器,可以代替我喜欢的 Sublime Text 3。Sublime Text 3 有 Linux 版本,但不适用于 ARM64,很多 app 都有这个问题。

我试图在 Pi OS beta 上编译 Dropbox,但失败了。所以我安装了 Rclone 来实现很多目标。

在命令行界面方面,Pi OS Terminal 就够用了。

在聊天方面,Pidgin 和 LimeChat 在树莓派上的效果很好。

此时,除了无法为我的某些项目找到预先构建的 arm64 Docker 镜像以外,我已经可以流畅地做许多开源和基础工作了。

但是,我也遇到了许多新问题。

第四步:发现问题

到了这一步,我发现了一个问题:在 Mac 上能做的很多小事情,要么在树莓派上做不了,要么就是过程比较坎坷。

举个例子,我每天早上都会用 Reeder 快速浏览数十个 RSS 提要。要想做到这件事,我就得使用一个令人痛苦的 Web UI,因为我找不到可以在 ARM 64 上编译的 Feedly 阅读器。

而且一般人都会经常使用推特。在树莓派上可以安装 Cawbird,但存在两个问题:1)使用过程中频繁出现瞬时错误;2)必须使用 Snap 安装它,所以…… 要先安装 snapd,然后重新启动树莓派。

这里先不讨论 Snap 的问题。此处想表达的是,对于我想使用的所有软件,我都必须花很多时间才能找到可以在 Linux 上运行的版本,然后再将其范围缩小至「在 Linux ARM64 上」。

我通常需要花几分钟编译源代码,在系统中放置可以直接打开程序的快捷方式。

第五步:多媒体功能很难实现

一天过去了,我想是否可以做点音视频工作,在树莓派上制作「一天体验」视频。

然而,刚一开始就遇到了问题。我无法使音频和视频设备正常运行。

我打开了 Zoom,它将 Logitech C920 网络摄像头识别为视频源,但是我却无法选择麦克风作为音频源。我看到了 Behringer USB 音频接口,但是选择后仍然没有声音。

我尝试了 BlueJeans,但没有看到摄像头或麦克风,唯一的选择是「通过电话加入」。但我点击该选项后,BlueJeans 界面被锁定,我不得不刷新界面!

Google Hangouts Meet 识别出了用于视频的网络摄像头,但是也没有音频。

后来我用 aplay -l 列出我的音频播放设备,然后 Behringer 界面出现了。arecord 也将网络摄像头和 Behringer 列为有效的输入设备:

$ arecord –list-devices **** List of CAPTURE Hardware Devices **** card 2: U192k [UMC202HD 192k], device 0: USB Audio [USB Audio] Subdevices: 1/1 Subdevice #0: subdevice #0 card 3: C920 [HD Pro Webcam C920], device 0: USB Audio [USB Audio] Subdevices: 1/1 Subdevice #0: subdevice #0

于是我花了 30 分钟时间,来尝试使用网络摄像头的麦克风或 Behringer 的音频接口进行录制。经过多次尝试,出现了以下两种有效的 FFmpeg 命令:

# Gets sound and video from the webcam: $ ffmpeg -ar 44100 -ac 2 -f alsa -i hw:3,0 -f v4l2 -codec:v h264 -framerate 30 -video_size 1920×1080 -itsoffset 0.5 -i /dev/video0 -copyinkf -codec:v copy -codec:a aac -ab 128k -g 10 -f mp4 test.mp4 # Sound from Behringer, video from webcam: ffmpeg -ar 44100 -ac 2 -f alsa -acodec pcm_s32le -i hw:2,0 -f v4l2 -codec:v h264 -framerate 30 -video_size 1920×1080 -itsoffset 0.5 -i /dev/video0 -copyinkf -codec:v copy -codec:a aac -ab 128k -g 10 -f mp4 test-webcam-audio.mp4

关于录制视频还有一点需要注意:树莓派的处理器无法即时进行 1080p 的转码和编码。幸运的是,Logitech C920 具有内置的硬件 H.264 编码,你可以直接从摄像头中提取流并将其保存到磁盘,而无需进行任何渲染。

但是,如果我使用的是没有内置编码器的另一个摄像头,那么树莓派在 1080p/30fps 的情况下只能以 5-8 fps 的速度录制。如果我将其设置为 480p/30fps,树莓派会录制好并保存成 mp4 格式。

对于纯音频录制,我试用了 gnome-audio-recorder,发现它甚至无法开始录制或者找到任何音频源,只会出现提示错误「无法将管道线设置为录音状态」。

结论

说了这么多,8GB 的树莓派 4 到底值不值得上手?作者给出的结论是:如果你想用它当通用电脑,那肯定是不行的。但对于一部分人来说,这款树莓派有它的独特优势。

如果你对计算机的使用主要是浏览器、代码编辑器、命令行(如后端 Web 开发、基础架构开发、写博客之类),那 8GB 内存的树莓派 4 完全够用了。即使你打开了一堆标签页,Chromium 也能运行良好。

所有成本算下来差不多 250 美元,包括键盘、鼠标、显示器、外接固态硬盘,再加上 75 美元的树莓派,与低配的 Chromebook 或者旧笔记本电脑相比仍然很有优势。作者提到,他正在考虑将树莓派 4 作为自己孩子的第一台电脑。

但是,如果你经常使用 Final Cut Pro、iMovie 等媒体编辑软件,建议还是攒钱买 MacBook Pro 吧。至少,目前还没有可以在树莓派上良好运行的类似工具,除非你愿意放弃可用性和稳定性。

作者表示,他可能会越来越多地在服务器应用中使用树莓派,因为树莓派的性价比和能效每一代都在提升,甚至可以在某些工作负载下比肩比它贵得多的计算机。

但他不认为今年是「Linux 桌面年」。他表示,对于主流用户而言,「桌面上的 Linux」永远是 20 年后的事情,就像核聚变一样。

原文链接:https://www.jeffgeerling.com/blog/2020/i-replaced-my-macbook-pro-raspberry-pi-4-8gb-day

via 机器之心

树莓派通过 I2C 驱动 LCD1602 液晶屏

LCD 1602 液晶屏模块的使用,之前在「基于PHP探针和Python爬虫的服务器监控」一文中有详细介绍。这个屏幕还有一种 I2C 方式的驱动模块,可以极大的简化接线和驱动程序。下面树莓派实验室将对这个模块的使用做一个介绍。

硬件说明

带 I2C 模块的 1602 屏幕背面如图所示。模块上有一颗可调电阻,用于调节显示的对比度。(购买链接,如果你新拿到一块屏幕无论怎么调试都不见显示,记得调节一下这里)

接线

GND — GND VCC — 接树莓派 5V SDA — I2C 数据 SCL — I2C 时钟

启用树莓派的I2C功能

sudo apt-get install -y python-smbus sudo apt-get install -y i2c-tools sudo raspi-config

按照下面的步骤设置开启 I2C 功能。

重启树莓派。

sudo reboot

然后运行下面的命令看一下是否识别到屏幕。

sudo i2cdetect -y 1

看到地址为 0x27,这说明已经成功连接了 LCD1602 屏幕。接下来就可以用 Python 控制 LCD1602 显示信息了。

编程

这里用到一个驱动程序,将下面的代码保存为 LCD1602.py。

import time import smbus BUS = smbus.SMBus(1) LCD_ADDR = 0x27 BLEN = 1 #turn on/off background light def turn_light(key): global BLEN BLEN = key if key ==1 : BUS.write_byte(LCD_ADDR ,0x08) else: BUS.write_byte(LCD_ADDR ,0x00) def write_word(addr, data): global BLEN temp = data if BLEN == 1: temp |= 0x08 else: temp &= 0xF7 BUS.write_byte(addr ,temp) def send_command(comm): # Send bit7-4 firstly buf = comm & 0xF0 buf |= 0x04 # RS = 0, RW = 0, EN = 1 write_word(LCD_ADDR ,buf) time.sleep(0.002) buf &= 0xFB # Make EN = 0 write_word(LCD_ADDR ,buf) # Send bit3-0 secondly buf = (comm & 0x0F) << 4 buf |= 0x04 # RS = 0, RW = 0, EN = 1 write_word(LCD_ADDR ,buf) time.sleep(0.002) buf &= 0xFB # Make EN = 0 write_word(LCD_ADDR ,buf) def send_data(data): # Send bit7-4 firstly buf = data & 0xF0 buf |= 0x05 # RS = 1, RW = 0, EN = 1 write_word(LCD_ADDR ,buf) time.sleep(0.002) buf &= 0xFB # Make EN = 0 write_word(LCD_ADDR ,buf) # Send bit3-0 secondly buf = (data & 0x0F) << 4 buf |= 0x05 # RS = 1, RW = 0, EN = 1 write_word(LCD_ADDR ,buf) time.sleep(0.002) buf &= 0xFB # Make EN = 0 write_word(LCD_ADDR ,buf) def init_lcd(): try: send_command(0x33) # Must initialize to 8-line mode at first time.sleep(0.005) send_command(0x32) # Then initialize to 4-line mode time.sleep(0.005) send_command(0x28) # 2 Lines & 5*7 dots time.sleep(0.005) send_command(0x0C) # Enable display without cursor time.sleep(0.005) send_command(0x01) # Clear Screen BUS.write_byte(LCD_ADDR ,0x08) except: return False else: return True def clear_lcd(): send_command(0x01) # Clear Screen def print_lcd(x, y, str): if x < 0: x = 0 if x > 15: x = 15 if y <0: y = 0 if y > 1: y = 1 # Move cursor addr = 0x80 + 0x40 * y + x send_command(addr) for chr in str: send_data(ord(chr)) if __name__ == ‘__main__’: init_lcd() print_lcd(0, 0, ‘Hello, world!’)

然后编写一个显示当前时间的示例程序,将下面的代码保存为 time.py。文件需要保存与 LCD1602.py 同一个目录下面。

#!/user/bin/env python import smbus import time import sys import LCD1602 as LCD if __name__ == ‘__main__’: LCD.init_lcd() time.sleep(1) LCD.print_lcd(2, 0, ‘WWW.QUWJ.COM’) for x in xrange(1, 4): LCD.turn_light(0) LCD.print_lcd(4, 1, ‘LIGHT OFF’) time.sleep(0.5) LCD.turn_light(1) LCD.print_lcd(4, 1, ‘LIGHT ON ‘) time.sleep(0.5) LCD.turn_light(0) while True: now = time.strftime(‘%m/%d %H:%M:%S’, time.localtime(time.time())) LCD.print_lcd(1, 1, now) time.sleep(0.2)

其中 LCD.print_lcd() 用来显示字符,前两个参数分别表示 X、Y 坐标(从 0 开始),后面的内容将从这个坐标的位置开始显示。第三个参数就是要显示的内容了。

LCD.turn_light(0) 表示关闭背光,LCD.turn_light(1) 表示打开背光。

在程序目录下执行下面的命令运行。

sudo python time.py

你还可以根据自己的需求,编写显示 IP 地址(参考这里)、系统状态信息的程序,并设置成开机启动(参考这里)来使用这块屏幕。