瑞士军刀扩展板的跑马灯实现(C++版)

树莓派上通过C和Python来控制GPIO已经成为了很流行的方式,本文介绍如何使用C++/Boost/OOP和用户空间驱动树莓派瑞士军刀扩展板的LED,实现跑马灯效果。相关原理和方法通用,当然也可以用于瑞士军刀扩展板之外的情况。

1、运行环境

系统信息:Linux raspberrypi 4.4.21-v7 #1 SMP Sat Sep 24 20:40:17 CST 2016 armv7l GNU/Linux

硬件搭配:Raspberry Pi 3B + 瑞士军刀扩展板,如图所示。

2、运行指令

可执行文件为程序包目录下的ledRun,使用sudo ./ledRun –help查看帮助信息。必须以sudo运行,因为本设计中使用用户空间驱动控制LED,需要访问需要root权限的系统设备。

运行实例:

sudo ./ledRun -d l-r -s 50 -l 100

参数解释:-d l-r指示LED运行方向为从左到右,-s 50指示每50ms LED动一下,-l 100指示LED总共跑100步。其他参数值请参考help message。

程序介绍

本章简要介绍程序整体设计,详细设计请查阅源代码。

1、main流程

main函数流程如图所示。

2、C++类LedPort

将瑞士军刀扩展板上的8个LED看做一个整体,使用类LedPort来抽象这8个LED。该类主要接口介绍如下:

1) 构造:初始化用户空间IO驱动程序,根据参数初始化LED状态。

2) void setStatus(unsigned char status_):设置LED状态,参数取值范围为0x00~0xFF,8个数据位和8个LED相对应,0代表灭,1代表亮。

3) unsigned char getStatus():获取LED状态,返回值为类型unsigned char,8个数据位和8个LED的状态相对应。

该类的私有方法中实现了对逻辑驱动芯片hc595的控制和对用户空间IO驱动的调用,类的用户无需关心,如需进一步了解,请查阅源码。

3、用户空间驱动

使用系统设备/dev/mem和mmap函数来实现对GPIO寄存器的控制,主要驱动接口函数如下:

1) void map_io_addr() 将物理空间地址映射为用户空间地址。

2) void unmap_io_addr() 解除地址映射。

3) int bcm2835_gpio_fsel(uint8_t pin, uint8_t mode) 设置BCM编号为pin的gpio的功能模式为mode。

4) int bcm2835_gpio_set(uint8_t pin) 设置BCM编号为pin的gpio的值为1。

5) int bcm2835_gpio_clr(uint8_t pin) 设置BCM编号为pin的gpio的值为0。

源码及Make

1、源码目录

ROOT ├── LedPort.cc //类LedPort ├── LedPort.h //类LedPort头文件 ├── ledRun //生成的可执行文件 ├── LedRun.cc //主程序 ├── low_lib //用户空间驱动程序目录 │ ├── BCM2835.h //树莓派CPU头文件 │ ├── io_ctrl.c //用户空间GPIO驱动 │ ├── io_ctrl.h //驱动头文件 │ ├── low_lib.mk //子目录Make文件 │ └── types.h //底层类型定义 └── Makefile //根目录Makefile文件

2、Make

1) 先定义Makefile中的BOOST库相关路径:

BOOST_INCLUDE=BOOST库头文件目录

BOOST_LIB=BOOST库.a文件目录

BOOST_LIBNAME=库名

示例:

BOOST_INCLUDE=/home/username/libs/boost1620_arm/include/

BOOST_LIB=/home/ username/libs/boost1620_arm/lib/

BOOST_LIBNAME=boost_program_options-gcc48-1_62

注意:boost_program_options-gcc48-1_62对应的.a文件为

lib boost_program_options-gcc48-1_62.a

2) 定义Makefile中的编译器,将编译器路径添加到PATH,这里使用的交叉编译工具为gcc-linaro-arm-linux-gnueabihf-raspbian-x64。编译器定义如下:

CC=arm-linux-gnueabihf-gcc # set default c compiler

CXX=arm-linux-gnueabihf-g++ # set default c++ compiler

3) 在Makefile所在的目录输入make ,完成后将会生成.o文件和可执行文件ledRun。

本例程源码(saks_led_boost_src.zip)、编译好的用于树莓派的C++/boost库(boost1620_arm.tar.gz)、C++/boost库源码(boost_1_62_0.tar.gz)下载地址:

https://pan.baidu.com/s/1n8oFL#list/path=%2Fraspberrypi%2Fboost&parentPath=%2F

(本文原稿来自SAKS用户,更多SAKS相关教程)

树莓派显示器电源管理禁止屏幕休眠

下面我们介绍当需要用到树莓派的显示屏作为演示或监视器的时候,禁止长时间无响应屏幕休眠的方法。区分两种情况:

一、禁止屏幕在图形界面下休眠

在 /etc/profile.d 路径下新建一个文件,如Screen.sh,并将下面两条命令写入该文件,即可以实现永久禁用。

xset dpms 0 0 0 xset s off

更多相关设置示例:

指令 说明 xset s off 禁用屏幕保护 xset s 3600 3600 设置空闲时间为1小时 xset -dpms 关闭 DPMS xset s off -dpms 禁用 DPMS 并阻止屏幕进入空闲 xset dpms force off 立即关闭屏幕 xset dpms force standby 强制屏幕进入待命状态 xset dpms force suspend 强制屏幕进入暂停状态

二、禁止屏幕在 Console 终端下休眠

执行下面的命令就可以解决这个问题。

setterm -blank 0

重启后此命令会失效,所以需要装这个命令加入到启动脚本中,每次开机后自动启动。

Raspbian 和 Archlinux 在 /etc/bash.bashrc 文件中加入,CentOS 则是在/etc/bashrc加入:

setterm -blank 0

更多相关设置:

setterm -blank [0-60|force|poke] setterm -powersave [on|vsync|hsync|powerdown|off] setterm -powerdown [0-60]

以上参数为0时表示禁用。例如下面的指令表示禁止屏幕进入保护和关闭状态

setterm -blank 0 -powerdown 0

相关引用

https://wiki.archlinux.org/index.php/Display_Power_Management_Signaling

树莓派完美运行安卓牛轧糖,DIY一部手机吧

GitHub(世界最大程序员社区) 网红 Peter Yoon 已经成功地将 Android 7.0 Nougat 刷入了 树莓派3(Raspberry Pi 3)了!一起来看看树莓派运行的 Android 7.0 的样子吧:

图:屏幕正脸

图:下拉通知栏

图:设置选项

Peter Yoon常用的 ID 是 pero-hd,是一个超级树莓派达人,曾经也成功地给树莓派灌入过 Android TV 的 ROM,他的 GitHub 地址是 https://github.com/peyo-hd 有兴趣的同学也可以一边吃瓜一边围观一下。不过,对于真想上手的同学,需要注意Google 也从未正式发不过针对树莓派的 Android 版本,所以这个 Android 7.0 也只是给大家尝鲜,如果又要用树莓派,又希望稳定性的话,那么可能还是比较推荐多年前的 Android 2.3 Gingerbread 老古董了。

树莓派基金会发布桌面操作系统 PIXEL OS

基于 Debian 衍生的 PIXEL 将把树莓派体验带到 x86 上,正如树莓派基金会所宣称的,“我们不只是要为树莓派创造最好的桌面环境,而是要创造最好的桌面环境,如是。”

树莓派基金会将其今年九月份发布的 PIXEL OS 移植到了 PC 和 Mac 上。

PIXEL 的意思是“Pi Improved Xwindows Environment, Lightweight”,即“树莓派改进的轻量级 Xwindows 环境”,树莓派的创始人 Eben Upton 说,“我们觉得大多数用户都希望要这样的一个桌面环境:干净整洁而现代化的用户界面;提升工作效率的生产力软件和编程工具,包括自由软件和专有软件。”

挖掘这个操作系统的其它用途的想法在这几个月来一直浮现在 Upton 的脑海中,正如他写的“在夏天时,我们就问自己一个简单的问题:如果我们这么喜欢 PIXEL,为什么我们非要人们买树莓派才能运行它呢?”

Upton 说他和其他的伙伴们注意到“有大量可以用来安装的 PC 和 Mac 机器丢在那里,它们可以很好的运行 x86 Debian”,并且问他们,“我们可以为这些机器做些什么吗?”

现在答案就是“YES”,树莓派基金会发布了该操作系统的 x86 体验版。

这个操作系统对硬件的需求很低,Upton 说 PIXEL “将运行在像我的 ThinkPad X40 这样的老机器上,它只要 512MB 内存就行。”Upton 认为这样的硬件需求很符合还在使用老式 PC 的学校,这就意味着学生们可以在学校的 x86 上使用和家里的树莓派上一样的 PIXEL 环境。

PIXEL 可以从 DVD 或 USB 盘启动,或者你也可以将它安装到计算机上。你可以下载这个 1.3GB 的 ISO 镜像试试,不过,有些型号的 Mac 可能不能用这个引导镜像启动。Upton 也表示,这还是一个早期发布版本,还在继续改进。

树莓派CM3发布:性能10倍于初代 内存翻倍

树莓派(Raspberry Pi)正式推出全新一代计算模块(Compute Module 3,以下简称CM3),与树莓派3采用的是同款处理器。

树莓派推出的计算模块主要目的是工业用途,第一代计算模块(Compute Module 1,以下简称CM1)于2014年推出,采用的是和第一代树莓派相同的CPU。CM3的全新升级包括:1GB RAM,1.2GHz的博通BCM2837处理器。相比前代,CM3的CPU性能提高了10倍。

虽然这是第二代计算模块,但是它却被命名为Compute Module 3,主要是为了跟最新一代的树莓派相匹配。CM3能够运行Windows IoT,并支持Linux。

树莓派官方公告中写道:“新款模块能够驾驭处理器引脚、高速内存接口、核心电源供应等复杂场景应用,而且能通过简单的负载主板来提供消费者所需要的外部接口和尺寸形态。”

CM3(左)和CM1(右)对比

CM3(左)和CM3 Lite(右)背面对比

相比前一代,CM3还有更灵活的存储选项,CM1只有固定的4GB eMMC闪存,而最新一代的CM3则有两个版本可供选择:标准版搭载的仍然是4GB eMMC闪存,而Lite版的4GB eMMC闪存被SD扩展接口所替代。其中标准版的CM3售价30美元(约合207元人民币),Lite版25美元(约合173元人民币)。

CM3的核心模块很小,能够适配各种硬件。此外,CM3还提供带有GPIO端口的I/O板,以及USB、MicroUSB、CSI、DSI、HDMI、MicroSD接口。

因为CM3和CM1的形状几乎完全一样(CM3比CM1高1mm),而且两者的pin针脚也相互兼容,因此可以很容易替换。不过要注意的是,CM3在高负载的情况下发热较大。

Raspbian Update-rc.d 命令用法详解

Raspbian、Ubuntu或者Debian系统中update-rc.d命令,是用来更新系统开机启动项的脚本。这些脚本的链接位于/etc/rcN.d/目录,对应脚本位于/etc/init.d/目录。在了解update-rc.d命令之前,你需要知道的是有关Linux 系统主要启动步骤,以及Ubuntu中运行级别的知识。

一、Linux 系统主要启动步骤

读取 MBR 的信息,启动 Boot Manager。 加载系统内核,启动 init 进程, init 进程是 Linux 的根进程,所有的系统进程都是它的子进程。 init 进程读取 /etc/inittab 文件中的信息,并进入预设的运行级别。通常情况下 /etc/rcS.d/ 目录下的启动脚本首先被执行,然后是/etc/rcN.d/ 目录。 根据 /etc/rcS.d/ 文件夹中对应的脚本启动 Xwindow 服务器 xorg,Xwindow 为 Linux 下的图形用户界面系统。 启动登录管理器,等待用户登录。

二、运行级别

Ubuntu中的运行级别

0(关闭系统)

1(单用户模式,只允许root用户对系统进行维护。)

2 到 5(多用户模式,其中3为字符界面,5为图形界面。)

6(重启系统)

切换运行级别

init [0123456Ss]

例如:init 0 命令关机; init 6 命令重新启动

启动项管理工具

sudo install sysv-rc-conf //或者使用带gui的工具bum sudo sysv-rc-conf

三、update-rc.d命令详解

从所有的运行级别中删除指定启动项

update-rc.d -f <basename> remove

按指定顺序、在指定运行级别中启动或关闭

update-rc.d <basename> start|stop <order> <runlevels>

实例:

update-rc.d apachectl start 20 2 3 4 5 . stop 20 0 1 6 .

解析:表示在2、3、4、5这五个运行级别中,由小到大,第20个开始运行apachectl;在 0 1 6这3个运行级别中,第20个关闭apachectl。这是合并起来的写法,注意它有2个点号,效果等于下面方法:

update-rc.d apachectl defaults

A启动后B才能启动,B关闭后A才关闭

update-rc.d A defaults 80 20 update-rc.d B defaults 90 10

启动和关闭顺序为90,级别默认

update-rc.d <basename> defaults 90

Fedora项目团队宣布添加对树莓派2和3的系统支持

Fedora项目团队于今天宣布添加对树莓派2和3的系统支持。项目负责人Peter Robinson说道:“过去几年反馈最多的要求就是对树莓派设备的支持,为此我们也付出了诸多努力。早期适配者早已经注意到Fedora 24中对树莓派的支持,不过当时系统各个方面还不够完善因此没有正式发布。为了提升易用性我们还需要在很多细节方面进行调试和修改。”

从今天开始,树莓派2和3单板计算机都能安装使用Fedora 25 Beta的系统,不过需要注意的是目前还未支持树莓派3的WiFi和蓝牙技术,不过在下个月(2016年11月15日)发布的最终版本中将会得到修复。

用树莓派DIY一台专门拍Gif动图的相机

树莓派在喜欢DIY的朋友眼里,是非常酷的东西,许多人都会利用树莓派自己动手DIY出各种各样有趣的技术。而现在又有人利用树莓派制造出了一台福库Pix-E相机,而这款相机最有趣的地方就是可以直接拍摄出gif动态图。

现在无论是朋友圈、公众号还是微博,gif动态图已经成为展示内容或者文章配图的重要组成元素,尤其是一些幽默搞笑的内容,只有gif动态图才能展示精髓,并且要比视频方便了很多。不过想要从视频中截取gif并不容易,虽然我们都有各种各样的方法,但基本上没有一个称得上方便。

这款Pix-E由Nick Brewer打造,通过树莓派Zero打造,使用了额外的树莓派摄像头模块以及自定义的组件,包括了完整的快门和电池组。

而Pix-E通过直接运行包括PiCamera、GraphicsMagick和GifCam等软件,可以直接拍摄出gif格式的动态视频,比如下图就是Pix-E拍摄的效果。

Pix-E的外壳基本上通过3D打印的方式制造,并且还包括了一些纸壳包装,看起来颇有90年代的感觉。不过在整个DIY过程中还需要一些比如初级的焊接和动手能力,不过整体来说难度不是太大,感兴趣并且喜欢DIY的朋友可以访问网站直接查看具体过程。

树莓派下编译RTL8723BU无线蓝牙网卡

来自树莓派实验室创客群 Archer 的投稿,在此表示感谢!

树莓派3有蓝牙有Wifi,但是2代1代总觉得有点悲剧,散热没有树莓派3来得高,但是没有无线功能和蓝牙功能,应该怎么方便使用呢?

我没事搞了一个RTL8723BU芯片的无线蓝牙网卡,京东搞的,挺可靠,想要给树莓派用,然而插进去,呵呵,没有驱动,于是就上网找办法,编译驱动。

首先是搭建好编译环境,在Raspbian之下,编译环境是全的,不用怎么操心。然后更新软件包内核

sudo apt-get update sudo apt-get upgrade dist-upgrade sudo rpi-update

更新完所有东西之后,就可以下载源码和编译了。

首先安装编译所需的build目录

sudo apt-get install raspberrypi-kernel-headers

然后创建文件夹链接,首先切换到内核文件夹下面(4.4.26+是我当时编译的最新内核版本,请你们通过uname -a指令来查看你们的Linux内核版本,改动指令)

cd /lib/modules/4.4.26+/ sudo mkdir build

然后关联文件夹和build库

sudo ln -s /usr/src/linux-headers-4.4.26+/ /lib/modules/4.4.26+/build

(要是说显示不能执行的话,代表快捷方式已经存在,可以不管了)

下载源码

git clone https://github.com/lwfinger/rtl8723bu.git cd rtl8723bu make sudo make install sudo modprobe -v 8723bu

执行完上面这些步骤,编译算是完成了,然后安装一下软件包,

sudo apt-get install bluez bluetooth

重启一下即可。

不过这个方法还是有一点Bug的,就是编译出来之后,会有两个wlan的,有一个不能使用的,这个不影响使用,我也不会解决(请不要打死我)。

要是树莓派当年能集成RTL8723BS(SDIO接口的无线蓝牙网卡模块)的话,估计能吊打现在的物联网板子好一阵子了。

(PS.如需与作者交流可加群339050109小窗)

树莓派发布第一个官方64位操作系统

Raspberry Pi 3 B型是树莓派当中第一个64位版本,尽管它的处理器升级,但是目前还没有一个官方的64位操作系统可用。这是因为Raspberry Pi基金会专注于使其Raspbian操作系统在所有世代的树莓派上运行。

现在好消息是,Linux操作系统厂商SUSE已经宣布专门为Raspberry Pi 3用户推出了一个64位Linux企业服务器操作系统,这些用户现在可以利用他们设备全部功能。

这是令人兴奋的事情,Raspberry Pi创始人Eben Upton表示,我们第一次有一个主要供应商来提供官方64位操作系统版本,支持我们的板载无线网卡和蓝牙。SUSE研发了所有所需的驱动程序和补丁,所以我们希望其他供应商的官方支持不会远远落后于SUSE。

要安装这个操作系统,用户需要在SUSE官方创建一个帐户,并下载用于Raspberry Pi 3的SUSE Linux Enterprise Server 12 SP2 60天评估版本,到期之后,会自动延长到1年时间。

基于Ubuntu Mate的树莓派NAS搭建

来自树莓派实验室创客群 Archer 的投稿,在此表示感谢!

很多玩家的树莓派玩法都是基于Raspbian来做的,很少人用其他系统,在这么多其他系统中,UbuntuMate算是对小白玩家最为友好的,操作界面明朗,应用和软件齐全,相对Raspbian流畅,当然,也不全是优点,默认没有SSH,安装配置需要显示器桌面配置,不过对于不是用于研究物联网的玩家,用来做服务是个不错的选择。我个人比较猥琐,研究树莓派的目的都是为了下载岛国大姐姐,所以在这里我用Ubuntu Mate做了个基于迅雷的下载NAS,希望你们不要鄙视我(笑)。

烧录Ubuntu Mate的镜像跟烧录Raspbian差不多(仅支持树莓派2和3,最新版本需要至少8G的TF卡),不过Ubuntu Mate并不能自动扩展TF卡,需要你们拿去Linux之下用Gparted扩展分区,完后把TF卡装进树莓派街上显示器、键盘、鼠标、电源就可以了(这里HDMI转VGA并不需要特别配置Config文件,都是自动识别的)。

接通电源之后,Ubuntu Mate就会自动安装系统,配置好时间地区、语言、键盘、用户和密码,就会自动安装,非常的傻瓜。

进入了系统之后,你可以安装远程桌面控件和SSH控件。

sudo apt-get install xrdp openssh-server

这样子下次开机,你就有办法远程操作了。

然后是做NAS的部分了。

安装相关软件包

sudo apt-get install ntfs-3g samba samba-common-bin netatalk avahi-daemon docker.io

先下载迅雷固件

sudo docker pull zxq1002/docker-thunder-xware:latest

创建一个下载目录,用于挂载卷

sudo mkdir data

运行

sudo docker run -d \ –name=xware \ –net=host \ -v $(pwd)/data:/app/TDDOWNLOAD \ zxq1002/docker-thunder-xware

查看运行情况

sudo docker ps // output: CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c8a3d047af71 zxq1002/docker-thunder-xware:latest “./start.sh” 4 seconds ago Up 3 seconds xware

记住CONTAINER对应的那行容器代码,有用

查看日志(激活码)/到迅雷增加设备

docker logs xware // output: killall: ETMDaemon: no process killed killall: EmbedThunderManager: no process killed killall: vod_httpserver: no process killed initing… try stopping xunlei service first… setting xunlei runtime env… port: 9000 is usable. YOUR CONTROL PORT IS: 9000 starting xunlei service… Connecting to 127.0.0.1:9000 (127.0.0.1:9000) setting xunlei runtime env… port: 9000 is usable. YOUR CONTROL PORT IS: 9000 starting xunlei service… getting xunlei service info… THE ACTIVE CODE IS: xxx go to http://yuancheng.xunlei.com, bind your device with the active code. Finished.

然后去远程迅雷的网址进行绑定 http://yuancheng.xunlei.com

接下来是挂载硬盘的步骤了。

编辑 /etc/fstab

sudo nano /etc/fstab

在文件末尾添加这一句,

/dev/sda1 /home/pi/data/TDDOWNLOAD ntfs-3g defaults,noexec,umask=0000 0 0

这样子,就算每当点进去/home/pi/data/TDDOWNLOAD ,就直接能进入记得硬盘了。

然后配置Samba 实现局域网文件共享

编辑文件

sudo nano /etc/samba/smb.conf

在文件末尾添加这些语句

[public] comment = Public Storage path = /home/pi/data/TDDOWNLOAD read only = no#任何人都具有了访问修改的权限 #因为是公共文件夹,所以给了所有用户全部权限,可以自定义 create mask = 0777#新创建文件的默认属性 directory mask = 0777#新创建文件夹的默认属性 guest ok = yes#默认的访问用户名为guest browseable = yes

然后,激活smb用户,用 smbpasswd 命令直接设置,需要首先要添加系统用户然后用 smbpasswd -a 用户名 添加Samba 用户(注意要添加系统已经存在的用户,默认存在两个 pi 和 root)

sudo smbpasswd -a pi

然后密码自己输入吧。。。。。。。。。。

然后激活Samba用户

sudo smbpasswd -e pi

然后输入

smbd restart

Samba服务就起效了。然后再自己的电脑里面点击进去网络里面,就可以看见了。

在关机重启之后,重启迅雷需要输入命令

sudo docker start xxxxxxxx(Docker容器代码)

最后,设置一下开机启动,改写一下启动脚本

sudo nano /etc/rc.local

在exit 0 之前,加上启动迅雷的命令

sudo docker start xxxxxxxx(Docker容器代码)

保存退出即可

在我完成这个玩意的时候,我发现我竟然没法连上Docker了,各位老司机有出轨上网教程的话,求分享,或者其他架设Docker库镜像的办法都可以,谢谢啦。

全新配置 HiFiBox DAC + RuneAudio 系统

HiFi DAC 是一款适用于树莓派的音频硬解码扩展板。RuneAudio 和 Volumio 类似,同样支持 HiFi DAC,不同的是它基于 ArchLinux 搭建。下面介绍如何配置使 RuneAudio 支持 HiFi DAC 硬解码。

已下内容仅供使用官网原版系统的朋友参考,我们假设你已经刷好了官方的系统镜像,如果还没有,请移步这里下载镜像。

启动系统后,编辑 /boot/config.txt 中的配置。

sudo nano /boot/config.txt

将 dtoverlay=hifiberry-dacplus 这行前的注释取消。按下 Ctrl+O 保存,按下 Ctrl+X 退出。并重启系统。

sudo reboot

再次进入系统后,通过访问系统的 WebUI 进入配置界面。(WebUI 的进入方法很简单,参考 HiFi DAC 说明书中相应章节。推荐在浏览器中输入树莓派的 IP 地址访问)按照下图进行配置。选择 HiFiBerry DAC+(I2S) 这项,只有完成了上面 config.txt 的编辑之后才会出现这个选项。

保存即可让播放器通过 HiFi DAC 输出音频了!

更多有关树莓派 HiFi 相关的内容请参考这里:

请参考这里 https://shumeipai.nxez.com/hifibox-dac-hat-for-raspberry-pi#expert

HiFiBox DAC 自定义红外遥控配置教程

HiFi DAC 是一款适用于树莓派的音频硬解码扩展板。集成了红外线接收器,用任何兼容的红外遥控,通过自定义遥控按键配置即可实现遥控 Volumio 播放器工作。

对于 Volumio 我们已经提供了配置好了的系统(更新:已不再公开提供,如需要请单独联系我们)可直接使用 HiFiBox DAC 和红外线遥控控制,以下内容仅供希望使用 Volumio 官方全新系统的用户阅读参考。我们假设你已经刷好了官方的系统镜像,如果还没有,请移步这里下载镜像。

一、首先安装好 HiFiBox DAC 扩展板,启动系统登录后(默认用户名:pi 密码:raspberry),运行以下命令安装 lirc 软件包。

sudo apt-get update sudo apt-get install lirc

注意,树莓派的 apt-get 的源在英国,如果上面更新和安装出现问题,可以选择中国科学技术大学的源,编辑/etc/apt/sources.list,删除其中的内容,使用一下内容代替后保存。

deb http://mirrors.ustc.edu.cn/raspbian/raspbian/ jessie main non-free contrib

如何编辑和替换使用,方法见这里。

二、编辑 /boot/config.txt 中的配置。

sudo nano /boot/config.txt

添加一行:

dtoverlay=lirc-rpi,gpio_in_pin=26

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

三、编辑 LRIC 的配置文件使能红外线功能。

sudo nano /etc/lirc/hardware.conf

修改以下行:

LIRCD_ARGS=”-–uinput” DRIVER=”default” DEVICE=”/dev/lirc0″ MODULES=”lirc_rpi”

按下 Ctrl+O 保存,按下 Ctrl+X 退出。并重启系统。并通过 ls /dev/l* 命令查看红外线设备是否使能,如果有 lirc0 就说明使能了。

sudo reboot

四、录制按键。

sudo /etc/init.d/lirc stop sudo irrecord -n -d /dev/lirc0 ~/lircd.conf

根据提示录制你的遥控器,分别录制 pause、nextsong、prevsong、stop、volumeup、volumedown。

将录制好的~/lircd.conf文件覆盖lirc软件的相应文件

sudo cp ~/lircd.conf /etc/lirc/lircd.conf

五、启动lirc软件

sudo /etc/init.d/lirc start

查看录制情况,执行以下命令。然后在遥控器上按下刚才分别录制的按键测试按键和指令的对应。

irw

六、编辑 .lircrc,执行以下命令

sudo pico ~/.lircrc

将以下内容添加到文件中

begin prog = irexec button = pause config = mpc toggle end begin prog = irexec button = nextsong config = mpc next;mpc play end begin prog = irexec button = prevsong config = mpc prev;mpc play end begin prog = irexec button = stop config = mpc stop end begin prog = irexec button = volumeup config = mpc volume +1 end begin prog = irexec button = volumedown config = mpc volume -1 end

注:可以在这里参考mpc的命令,自行添加自己想要的按键和功能(http://linux.die.net/man/1/mpc)

执行以下命令就能控制 Volumio 了。

irexec -d

七、编辑 rc.local 文件,让 Volumio 启动后自动使能红外线接收功能,执行以下命令

sudo nano /etc/rc.local

在exit0之前,添加以下内容,如果系统是Volumio2.0,请将下面的 pi 修改为 volumio

(sleep 3; sudo -u pi irexec -d )&

按下 Ctrl+O 保存,按下 Ctrl+X 退出。并重启系统。就完成红外的配置了!

更多有关树莓派 HiFi 相关的内容请参考这里:

请参考这里 https://shumeipai.nxez.com/hifibox-dac-hat-for-raspberry-pi#expert

全新配置 HiFiBox DAC + Volumio 1.55 系统

HiFi DAC 是一款适用于树莓派的音频硬解码扩展板。Volumio 和 RuneAudio 类似,同样支持 HiFiBox DAC,不同的是它基于 Raspbian 搭建。下面介绍如何配置使 Volumio 1.55 版支持 HiFiBox DAC 硬解码。顺便提一下,Volumio 2.x BETA 版同样能支持 HiFiBox DAC 硬解码,且配置非常容易,几乎直接可以在 WebUI 里面配置即可完成。我们会在必要的时候单独发文章说明,这里只针对 Volumio 1.55 版的配置作介绍。如果你想使用最新的 Volumio 系统,可以参考《全新配置 HiFiBox DAC + Volumio 2.X 系统》一文。

对于 Volumio 我们已经提供了配置好了的系统(更新:已不再公开提供,如需要请单独联系我们)可直接使用 HiFiBox DAC 和红外线遥控控制,以下内容仅供希望使用 Volumio 官方全新系统的用户阅读参考。我们假设你已经刷好了官方的系统镜像,如果还没有,请移步这里下载镜像。

启动系统后,编辑 /boot/config.txt 中的配置。

sudo nano /boot/config.txt

移除 dtparam=audio=on 这行,如果有的话(默认是没有的,这里写出来以检查其他配置可能带来的冲突)。再添加一行:

dtoverlay=hifiberry-dacplus

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

编辑文件 /etc/asound.conf。

sudo nano /etc/asound.conf

填入如下内容,请先确保这个文件之前是空白的再填入:

pcm.!default { type hw card 0 } ctl.!default { type hw card 0 }

按下 Ctrl+O 保存,按下 Ctrl+X 退出。并重启系统。

sudo reboot

再次进入系统后,执行 aplay -l,查看声卡是否在声卡列表中

看到以上内容说明声卡配置正确。

下面通过访问系统的 WebUI 进入配置界面。(WebUI 的进入方法很简单,参考 HiFiBox 说明书中相应章节。推荐在浏览器中输入树莓派的 IP 地址访问)按照下图进行配置。经过上面的步骤,MPD 配置中,Audio Output 应该已经变为了 sndrpihifiberry,如果配置还是 ALSA,请手动选择为 sndrpihifiberry。

再进入系统菜单,将 I2S driver 配置为 Hifiberry +。

保存并重启即可让播放器通过 HiFiBox DAC 输出音频了!

更多有关树莓派 HiFi 相关的内容请参考这里:

请参考这里 https://shumeipai.nxez.com/hifibox-dac-hat-for-raspberry-pi#expert

树莓派“瑞士军刀”扩展板教程 V1.X TO V2.X 的适配说明

本文介绍在树莓派瑞士军刀扩展板升级到V2.0之后,如何对原先V1.X的教程做出适当修改之后应用到V2.0的方法。以下将通过链接引用V1.0的内容并附上差异说明和代码变更来对每一个DIY应用进行阐述。

开始之前,你需要了解SAKS V2.0在硬件和SDK上做了哪些变更,可以参考硬件变更、SDK变更:

由于V2.0的引脚顺序重新定义过,因此原有教程中的引脚编号对应表需要自行对应到新版本。另外,SDK升级说明中关于LED组的调用方法也请特别注意。虽然Github上我们将SDK的目录结构做了调整,但我们尽可能保证了对旧有代码的兼容性,main.py 主程序中对SDK的导入依然可沿用之前的方式无需变更。

Lv1,树莓派瑞士军刀扩展板上手把玩

1.1、轻松搞定 GPIO 开发环境(V1.X版例程)

环境的安装未变更。原例程中用了一个LED作为测试,由于新SAKS的LED必须通过寄存器来操作,因此这里先改用蜂鸣器来测试。在以后的教程中将说明LED组的使用方法。

对照原例程,Python代码修改为

# -*- coding: utf-8 -*- import RPi.GPIO as GPIO import time # BOARD编号方式,基于插座引脚编号 GPIO.setmode(GPIO.BCM) # 输出模式 GPIO.setup(12, GPIO.OUT) while True: GPIO.output(12, GPIO.HIGH) time.sleep(1) GPIO.output(12, GPIO.LOW) time.sleep(1)

C代码修改为

#include int main(void) { wiringPiSetup(); pinMode (26, OUTPUT); for(;;) { digitalWrite(26, HIGH); delay (500); digitalWrite(26, LOW); delay (500); } }

其他部分不变,测试效果为蜂鸣器发出哔声。

1.2、绚丽的流水灯(V1.X版例程)

SAKS V2.0 LED组的操作方式改用由一片74HC595芯片驱动,该芯片的使用方法查看这里。我们已经将该驱动封装在SAKS SDK中,要在SAKS上实现原文中的流水灯效果变得异常简易。而下面我们将介绍在不使用SDK的情况下如何驱动LED组以便大家能对LED组的操作原理有深入理解。

完整代码如下:

import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) DS = 6 SHCP = 19 STCP = 13 def init(): GPIO.setup(DS, GPIO.OUT) GPIO.setup(SHCP, GPIO.OUT) GPIO.setup(STCP, GPIO.OUT) GPIO.output(DS, GPIO.LOW) GPIO.output(SHCP, GPIO.LOW) GPIO.output(STCP, GPIO.LOW) def writeBit(data): GPIO.output(DS, data) GPIO.output(SHCP, GPIO.LOW) GPIO.output(SHCP, GPIO.HIGH) #写入8位LED的状态 def writeByte(data): for i in range (0, 8): writeBit((data >> i) & 0x01) #状态刷新信号 GPIO.output(STCP, GPIO.LOW) GPIO.output(STCP, GPIO.HIGH) try: init() while True: #以下一组8个编码由一组二进制转换而成: #00000001,00000010,00000100,00001000,00010000,00100000,01000000,10000000 #分别对应8个LED点亮状态 for i in [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80]: writeByte(i) time.sleep(0.1) #LED组全开 #writeByte(0xff) #time.sleep(0.1) except KeyboardInterrupt: print “except” #LED组全关 writeByte(0x00) GPIO.cleanup()

在终端运行下载本教程的源码库并进入到对应的源码目录,执行运行脚本的指令可看到效果:

git clone https://github.com/spoonysonny/SAKS-tutorials.git cd SAKS-tutorials/water-lights sudo python waterlights.py

1.3、通过串口登录树莓派(V1.X版例程)

步骤和流程完全没有变,排针位置有调整,请按照扩展板上注释所示接线(RX、TX、GND 注释已标注)。

1.4、红色警报器(V1.X版例程)

将原代码中关于LED的部分注释掉(舍去LED闪烁效果)、修改蜂鸣器的引脚编号后即可正常运行。

PIN_NO_BEEP = 12 #PIN_NO_LED = 7 GPIO.setmode(GPIO.BCM) GPIO.setup(PIN_NO_BEEP, GPIO.OUT, initial=GPIO.HIGH) #GPIO.setup(PIN_NO_LED, GPIO.OUT, initial=GPIO.HIGH) # 单次哔声和LED发光 def beep(seconds): GPIO.output(PIN_NO_BEEP, GPIO.LOW) #GPIO.output(PIN_NO_LED, GPIO.LOW) time.sleep(seconds) GPIO.output(PIN_NO_BEEP, GPIO.HIGH) #GPIO.output(PIN_NO_LED, GPIO.HIGH)

在终端运行下载本教程的源码库并进入到对应的源码目录,执行运行脚本的指令可看到效果:

git clone https://github.com/spoonysonny/SAKS-tutorials.git cd SAKS-tutorials/chime sudo python chime.py

1.5、浪漫小夜灯(V1.X版例程)

SAKS SDK将大部分方法的调用均保持了兼容,仅需要使用最新的SAKS SDK V2.0,经过小幅的调整即可适配到SAKS V2.0。

新的SDK不再支持 SAKS.ledrow.items[n].on() 这种用法了,将原代码修改为 SAKS.ledrow.on_for_index(n) 即可。

在终端运行下载本教程的源码库并进入到对应的源码目录,执行运行脚本的指令可看到效果:

git clone https://github.com/spoonysonny/SAKS-tutorials.git cd SAKS-tutorials/nightlight sudo python main.py

Lv2,树莓派瑞士军刀扩展板进阶例程

2.1、呼吸灯(V1.X版例程)

呼吸灯需要对IO口作PWM控制,而由于SAKS V2.0用来驱动LED的74HC595芯片并不支持该模式,因此无法实现该例程中的呼吸灯效果。

2.2、数字闹钟(V1.X版例程)

SAKS SDK将大部分方法的调用均保持了兼容,仅需要使用最新的SAKS SDK V2.0,经过小幅的调整即可适配到SAKS V2.0。将原代码中关于LED的部分注稍作调整后即可正常运行,其中关于LED操作的代码。

SAKS.ledrow.items[6].off()

改为

SAKS.ledrow.off_for_index(6)

SAKS.ledrow.items[6].on()

改为

SAKS.ledrow.on_for_index(6)

在终端运行下载本教程的源码库并进入到对应的源码目录,执行运行脚本的指令可看到效果:

git clone https://github.com/spoonysonny/SAKS-tutorials.git cd SAKS-tutorials/digital-clock sudo python main.py

Lv3,树莓派瑞士军刀扩展板实用应用

3.1、数字温度计(V1.X版例程)

SAKS SDK将大部分方法的调用均保持了兼容,仅需要使用最新的SAKS SDK V2.0,经过小幅的调整即可适配到SAKS V2.0。本例程的代码仅需要将原SDK更新到SAKS SDK V2.0即可正常运行。

传感器安插位置和方向请参考下图:

在终端运行下载本教程的源码库并进入到对应的源码目录,执行运行脚本的指令可看到效果:

git clone https://github.com/spoonysonny/SAKS-tutorials.git cd SAKS-tutorials/temperature-display-ds18b20 sudo python main.py

3.2、CPU 温度显示和警报(V1.X版例程)

SAKS SDK将大部分方法的调用均保持了兼容,仅需要使用最新的SAKS SDK V2.0,经过小幅的调整即可适配到SAKS V2.0。本例程的代码仅需要将原SDK更新到SAKS SDK V2.0即可正常运行。

在终端运行下载本教程的源码库并进入到对应的源码目录,执行运行脚本的指令可看到效果:

git clone https://github.com/spoonysonny/SAKS-tutorials.git cd SAKS-tutorials/CPU-temperature-display sudo python main.py

3.3、树莓派关机键(V1.X版例程)

原例程中使用了单个LED的闪烁表示关机或重启前的状态。适配到SAKS V2.0上,我们需要对驱动LED的74HC595芯片操作方法做一个简单的封装来实现同样的效果。

修改后的完整代码如下:

import RPi.GPIO as GPIO import time import os,sys import signal #定义关机键和关机状态指示灯的GPIO引脚 GPIO.setmode(GPIO.BCM) pin_btn = 20 DS = 6 SHCP = 19 STCP = 13 #初始化SAKS上相应按键,按键内部上拉 GPIO.setup(pin_btn, GPIO.IN, pull_up_down = GPIO.PUD_UP) GPIO.setup(DS, GPIO.OUT) GPIO.setup(SHCP, GPIO.OUT) GPIO.setup(STCP, GPIO.OUT) GPIO.output(DS, GPIO.LOW) GPIO.output(SHCP, GPIO.LOW) GPIO.output(STCP, GPIO.LOW) #初始化按下关机键的次数 press_times = 0 #按下关机键后等待并倒数10次 count_down = 10 led_on_reboot = 0 led_on_halt = 0 def writeBit(data): GPIO.output(DS, data) GPIO.output(SHCP, GPIO.LOW) GPIO.output(SHCP, GPIO.HIGH) #写入8位LED的状态 def writeByte(data): for i in range (0, 8): writeBit((data >> i) & 0x01) #状态刷新信号 GPIO.output(STCP, GPIO.LOW) GPIO.output(STCP, GPIO.HIGH) def onPress(channel): global press_times, count_down print(‘pressed’) press_times += 1 if press_times > 3: press_times = 1 #重启模式 if press_times == 1: #黄色LED亮 writeByte(0x20) print(‘system will restart in %s’ % (count_down)) #关机模式 elif press_times == 2: #红色LED亮 writeByte(0x80) print(‘system will halt in %s’ % (count_down)) #模式取消 elif press_times == 3: writeByte(0x00) print ‘cancel’ count_down = 10 #设置按键检测,检测到按下时调用 onPress 函数 GPIO.add_event_detect(pin_btn, GPIO.FALLING, callback = onPress, bouncetime = 500) try: while True: #重启模式 if press_times == 1: if count_down == 0: print “start restart” os.system(“shutdown -r -t 5 now”) sys.exit() led_on_reboot = not led_on_reboot #黄色 LED 闪烁 if led_on_reboot: writeByte(0x20) else: writeByte(0x00) #关机模式 if press_times == 2: if count_down == 0: print “start shutdown” os.system(“shutdown -t 5 now”) sys.exit() led_on_halt = not led_on_halt #红色 LED 闪烁 if led_on_halt: writeByte(0x80) else: writeByte(0x00) if press_times == 1 or press_times == 2: count_down -= 1 print “%s second” % (count_down) time.sleep(1) except KeyboardInterrupt: print(‘User press Ctrl+c, exit;’) finally: GPIO.cleanup()

在终端运行下载本教程的源码库并进入到对应的源码目录,执行运行脚本的指令可看到效果:

git clone https://github.com/spoonysonny/SAKS-tutorials.git cd SAKS-tutorials/power-button sudo python powerbutton.py

3.4、数字秒表(V1.X版例程)

SAKS SDK将大部分方法的调用均保持了兼容,仅需要使用最新的SAKS SDK V2.0,经过小幅的调整即可适配到SAKS V2.0。本例程的代码仅需要将原SDK更新到SAKS SDK V2.0即可正常运行。

在终端运行下载本教程的源码库并进入到对应的源码目录,执行运行脚本的指令可看到效果:

git clone https://github.com/spoonysonny/SAKS-tutorials.git cd SAKS-tutorials/digital-stopwatch sudo python main.py

Lv4,树莓派瑞士军刀扩展板挑战应用

4.1、PM2.5 指示灯(V1.X版例程)

SAKS SDK将大部分方法的调用均保持了兼容,仅需要使用最新的SAKS SDK V2.0,经过小幅的调整即可适配到SAKS V2.0。将原代码中关于LED的部分注稍作调整后即可正常运行。

SAKS.ledrow.items[n].on()

改为

SAKS.ledrow.on_for_index(n)

SAKS.ledrow.items[n].off()

改为

SAKS.ledrow.off_for_index(n)

在终端运行下载本教程的源码库并进入到对应的源码目录,将代码中的 cityid 和 key 根据实际情况替换。执行运行脚本的指令可看到效果:

git clone https://github.com/spoonysonny/SAKS-tutorials.git cd SAKS-tutorials/pm25-display sudo python main.py

4.2、站点宕机指示(V1.X版例程)

原例程中使用了单个LED的闪烁表示关机或重启前的状态。适配到SAKS V2.0上,我们需要对驱动LED的74HC595芯片操作方法做一个简单的封装来实现同样的效果。

关键代码修改如下:

def writeBit(data): GPIO.output(DS, data) GPIO.output(SHCP, GPIO.LOW) GPIO.output(SHCP, GPIO.HIGH) #写入8位LED的状态 def writeByte(data): for i in range (0, 8): writeBit((data >> i) & 0x01) #状态刷新信号 GPIO.output(STCP, GPIO.LOW) GPIO.output(STCP, GPIO.HIGH) while True: check() #正常状态,绿灯亮 if status == 200: writeByte(0x04) #异常状态,黄灯亮 elif status == 500 or status == 404 or status == 403: writeByte(0x10) #错误状态,红灯亮 else: writeByte(0x40)

在终端运行下载本教程的源码库并进入到对应的源码目录,执行运行脚本的指令可看到效果:

git clone https://github.com/spoonysonny/SAKS-tutorials.git cd SAKS-tutorials/site-check sudo python sitecheck.py

本文属于《树莓派瑞士军刀扩展板(SAKS)DIY 教程》系列文章,查看系列文章目录,请访问:https://shumeipai.nxez.com/swiss-army-knife-shield-for-raspberry-pi-diy-tutorials