暑假里,留校了基本50天,在机器人比赛上,参加了南京的旅游机器人比赛和山东的全国机器人比赛。但实在有些后悔,并没有拿到特别好的成绩。反思起来,一部分是因为自己没有用心参与团队的比赛,另一方面,我们可能过多依赖于别人的技术。

这段时间,思前想后,发现:我们虽然用学校经费大价钱购置了几台往年的车型,但底层的核心代码全部掌握在别人手中。这一点导致我们接手后能做的工作只是在大框架下进行代码调试,使其适应比赛规则及场地的要求,但无法做出创新的更改。最终,还是决定做一个一台自组装的智能小车,并希望用小车来参加明年的比赛。

小车采用树莓派3做总控,并通过各种扩展模块对电机,传感器进行控制。具体的方案我会写在将来的文章中,在此,仅写下环境配置方案,以备份用于不时之需。

硬件选择与介绍

作为一个机器人项目,用作中控的芯片选择很多:

  • 基于AVR的arduino系
  • stm32系
  • arm系
  • fpga系
  • ……

其中fpga开发难度极大,且价格较贵,一般用作飞控,这里不做考虑;而在我所想的方案中,希望能够做到较容易的开发且需要一定量的计算能力,arduino和stm32一般产品的时钟频率都比较偏低,难以应对图像处理,且stm32需要从底层开发,难度较大;而在arm系中树莓派成为一个极佳的选择。

树莓派至今(2017年98月),已出3代产品,每代产品又分为A、B两型。A型一般用于企业,公司定制,无各种外接接口,需要额外焊接;B型为对外出售型号,有各式各样的IO接口,包括USB,HDMI,3.5mm音频接口,lan接口,以及专用的摄像头输入和视频输出接口。

而最主要的,是其包含40pin的gpio,这一点足够用于机器人开发。除此外,B型还有后期的B+型号,是对B型的性能的较低提升。就性能而言,不像arduino和stm32孱弱的性能(一般低于50mHz),树莓派是一台完整的计算机,soc为博通研发,现在最新第三代产品raspberrypi3 B,其cpu采用4核1.2G,足够用以图像处理,甚至跑一些简单的神经网络模型。

具体详细的各版本硬件介绍,可以参阅树莓派百度百科。

系统安装

raspberrypi官方系统安装

树莓派官方官网:https://www.raspberrypi.org/downloads/

![](https://raw.githubusercontent.com/smilelc3/blog/main/images/树莓派做智能小车环境配置/批注 2019-03-20 130857.png)

分为NOOBS版本和RASPBIAN版,NOOBS内置了RASPBIAN但多了一个启动界面(相当于BIOS),在安装时可以通过网络选择其他的系统,我们一般若安装官网系统直接下载RASPBIAN版,就好。

  1. 下载后,解压会得到一个img后缀的文件,这就是已打包的系统镜像;
  2. sd插入电脑(可用读卡器),格式化sd卡;
  3. 下载win32diskimager,用于写入镜像;
  4. 选择已解压的镜像文件,并选择sd卡盘符(默认已选),最后点Write 即可完成写入;
  5. sd插入树莓派,接入hdmi线,通电自动开机。

第三方系统安装:ubuntu mate

因为linux一直在用Ubuntu的发行版,所以在本次配置中拟采用ubuntu mate作为系统环境,针对树莓派的ubuntu mate下载地址,和2.1系统安装一样,解压得到img文件,win32diskimager写入,开机。

基础环境配置

vim编译器

vim编译器一直我都比较喜欢,但逻辑不同于一般win平台的编译器(例如notepad++),需要一定的时间练习。在官方系统可能存在vim编译器为common版,在编辑时存在方向键无法使用的问题,通过以下命名即可更换:

1
2
sudo apt-get remove vim-common
sudo apt-get install vim

中文输入法

  • raspbian版中,系统默认英文,且没有中文字库,我们需先安装简体字体
1
sudo apt-get install ttf-wqy-zenhei
  1. 再通过 raspi-config进入参数选择;
  2. 然后选择change_locale;
  3. 在Default locale for the system environment中选择zh-CN UTF-8(空格键选择);
  4. 然后然后按回车,然后默认语言选中zh-cn然后回车;
  5. 重启机器,就发现整个环境变成中文的了。
  • ubuntu mate系统安装时,可以自主选择语言,不存在字体问题。在系统中,我们采用google拼音输入法作为中文输入法,注意这里采用fcitx作为输入法框架,类似框架还用ibus。
1
sudo apt-get install fcitx fcitx-googlepinyin

在raspbian中,我们采用ibus输入法作为中文输入法

1
sudo apt-get install ibus ibus-pinyin

更新源更改

因为墙的原因,国内访问树莓派的更新源都比较慢,甚至出现404情况,因此我建议把源换回国内

  • raspbian系统的国内源比较多,这里我们采用阿里云的源
1
2
3
4
sudo nano /etc/apt/sources.list #编辑源
# 把所有内容替换为以下内容,保存并退出
deb http://mirrors.aliyun.com/raspbian/raspbian/ stretch main non-free contrib
deb-src http://mirrors.aliyun.com/raspbian/raspbian/ stretch main non-free contrib

最后,更新源,会看见明显下载速度的提升

1
2
sudo apt-get update
sudo apt-get upgrade
  • ubuntu mate的源相对较少,国内我现在只找到一家,是中科大的源。具体操作也是
1
2
sudo vim /etc/apt/sources.list #编辑源
# 然后把其中的 http://ports.ubuntu.com/ 换为 http://mirrors.ustc.edu.cn/ubuntu-ports/

最后,同样命令更新源

1
2
sudo apt-get update
sudo apt-get upgrade

pip源更改

pip源也存在连接过慢的问题,pip源更改也比较简单,

对Linu系统:首先进用户主文件,建立个.pip文件夹(注意有个点),再在.pip文件下建立pip.conf文件。

1
2
3
4
cd ~/
sudo mkdir .pip
cd .pip
sudo vim pip.conf

写入以下内容,详情见http://mirrors.aliyun.com/help/pypi

1
2
3
4
5
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/

[install]
trusted-host=mirrors.aliyun.com

远程设置

远程连接一般采用两种方式ssh和远程桌面

  • SSH:

    • raspbian版可通过raspi-config设置ssh开启,或在存储卡根目录新建一个ssh空文件
    • ubuntu mate版默认开启ssh
  • 远程桌面:远程桌面有多个选择,vnc,xrdp等,我们建议使用xrdp,可以免于繁琐的配置。但在raspbian版中已经集成了vnc,可以通过raspi-config开启

1
sudo apt-get install xrdp

文件共享

文件共享能实现局域网内windows与树莓派的文件共享。

  1. 首先要保证windows网络发现功能开启,树莓派上采用samba作为共享工具

    1
    2
    sudo apt-get install samba samba-common-bin 	# 安装samba
    sudo vim /etc/samba/smb.conf # 修改配置文件
  2. 在文本末端加入以下内容(以共享主文件下 公共的 文件夹为例)

    1
    2
    3
    4
    5
    6
    7
    [共享目录]
    comment = this is Linux share directory
    path = ~/公共的
    public = yes
    writable = yes
    browseable = yes
    available = yes
  3. 再重启samba服务

    1
    sudo /etc/init.d/samba restart
  4. 在Samba配置文件设置过权限后,还需要在系统中将共享文件夹的权限设置为同配置文件中相同的权限,这样才能确保其他用户正常访问及修改文件夹内容

    1
    sudo chmod -r 777 ~/公共的/

应该就能在windows的网络位置发现树莓派设备了。

开发环境配置

openCV3.2 编译安装

关于3.2版的openCV我已经写在我的另一篇文章ubuntu17.04环境下opencv3.2.0配置,基本同样的步骤,只是在make的时候,树莓派的计算能力较弱,且发热量较大,如果没有主动散热,建议

1
sudo make -j2 #两个线程编译

当然,若有额外的散热工具,也可以用:

1
sudo make -j4  #四线程加快编译

tensorflow 安装

tensorflow作为Google开源的计算机深度学习库,可以极大简化深度学习的代码。

github上已经有人针对树莓派做好了移植代码,致敬!链接

注意:现在的所支持tensorflow最高版本为1.2.0,所支持的python版本为2.7和3.4,一般的树莓派系统都是3.5,这一点可以通过docker解决。

具体步骤不再赘述,请移步github查看。

实验环境

  • CPU:Ryzen 1800x
  • 系统:ubuntu 17.04 64bit
  • 软件环境:python2.7 + python3.5 + cuda开发环境(cuda8.0 cuddn 5.1)

因实验要求,需要对图片进行灰度编码,自然而然想到利用openCV库结合python进行,但由于系统较新,且网上教程多为老版本,新教程也有些小错误,特记下配置过程

  • 预配置环境:openCV 3.2.0(cuda加速+python3环境+contrib扩展包)

openCV基础环境配置

  1. 对源的更新
1
2
sudo apt-get uupdate
sudo apt-get update
  1. 环境搭建
1
sudo apt-get install build-essential cmake cmake-qt-gui pkg-config git
  1. 图像格式相关
1
sudo apt-get install libpng-dev libjpeg-dev libtiff5-dev
  1. GUI相关
1
sudo apt-get install libgtk2.0-dev
  1. 视频格式相关
1
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
  1. C++多线程相关
1
sudo apt-get install libtbb2 libtbb-dev
  1. 摄像头相关
1
sudo apt-get install libdc1394-22-dev
  1. openGL相关
1
sudo apt-get install libgtkglext1 libgtkglext1-dev

注意:针对可选安装libjasper-dev包,该包是针对图像格式JPEG-2000的开发包。在最新的ubuntu17.04中,已放弃对该包的安装支持,如涉及到对该格式的处理,可以到https://packages.ubuntu.com/trusty/libjasper-dev ubuntu的官方包管理网址获取,该包需要依赖包libjasper1,请一并下载。但两包无法直接通过ubuntu软件安装器安装,可以通过dpkg命令安装:

1
sudo dpkg -i <package.deb>

openCV下载与本地编译

这次安装版本为3.2.0,需要下载opencv-3.2.0与opencv_contrib-3.2.0(后者会在cmake配置的时候用到),这是因为opencv3以后SIFT和SURF之类的属性被移到了contrib中。

下载采用wget命令:

1
2
3
# 从github上直接下载或者clone也可
wget https://github.com/opencv/opencv/archive/3.2.0.zip -O opencv-3.2.0.zip
wget https://github.com/opencv/opencv_contrib/archive/3.2.0.zip -O opencv_contrib-3.2.0.zip

分别解压文件:

1
2
unzip opencv-3.2.0.zip
unzip opencv_contrib-3.2.0.zip

获得opencv-3.2.0与opencv_contrib-3.2.0两个文件夹,打开opencv3.2.0文件夹

新建build文件夹,作为编译文件路径:

1
2
cd opencv-3.2.0
mkdir build

打开cmake图形界面:

1
sudo cmake-gui
  1. 打开cmake图形界面,源码位置设置为opencv-3.2.0文件夹,binaries(二进制文件)位置设为新建build文件夹位置;
  2. 在search框输入opengl,勾选上(为了避免opengl版本问题导致的不兼容,这里最好选择使用opencv自带的openGL;
  3. 在search框输入opencv_extra_modules_path,在后面value值处填上两个包中另一个opencv_contrib-3.2.0下modules的路径;
  4. 然后点击configure,cmake会自动进行参数检测,并下载一些相关包;

**注意:**可能遇到ippicv_linux_20151201.tgz文件下载失败的问题,(墙的原因),解决办法为百度搜索下载(例如CSDN下载http://download.csdn.net/download/lx928525166/9479919,并cp命令复制到/opencv-3.2.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e文件夹下。(最后一个文件夹名可能不一样)

  1. 最后cmake中点击Generate,生成编译文件;
  2. 然后cd命令进build文件夹
1
2
sudo make -j16 # -j后面数字为采用线程数,根据个人配置而定
sudo make install
  1. 进度到100%表示安装成功。

python环境的绑定

我们已经成功安装openCV,且在配置时openCV会自动与python进行绑定,我们可以通过以下方式进行测试:

  1. 重启

    1
    sudo reboot

    sudo reboot

  2. 测试,在python中,若无报错,即可认为绑定成功。

    1
    import cv2

我们也可以通过安装预编译的第三方所提供的openCV

1
pip install opencv-python opencv-contrib-python

效果展示

最终效果视频

监控+差值+黑白二值图像

代码

  • 该程序计算量要求较低,可以部署在树莓派类的物联网设备上

python包配置

1
2
3
4
sudo pip install argparse #用于解析参数
sudo pip install imutils #用于修改图片格式大小
sudo apt-get install libopencv-dev
sudo apt-get install python-opencv #安装opencv

python代码

代码写的相当详细,注释的极其详细,不再赘述。(python版本2.7)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#coding:utf-8
#必要的包
import argparse
import datetime
import imutils
import time
import cv2

#创建参数解释器并解析参数
ap = argparse.ArgumentParser()
ap.add_argument("-v", "--video", help="path to the video file")
ap.add_argument("-a", "--min-area", type=int, default=1000, help="minimum area size")
args = vars(ap.parse_args())

#如果video参数为None, 那么我们从摄像头读取数据
if args.get("video", None) is None:
camera = cv2.VideoCapture(0)
originaltime = time.time()#记录时间
else:
camera = cv2.VideoCapture(args["video"])
#初始化视频流的第一帧
firstFrame = None
num=0
#遍历视频的每一帧
while True:
if time.time()-originaltime <= 2: #等待摄像机开启并稳定
(grabbed, frame) = camera.read()
else:
(grabbed, frame) = camera.read()
#调用camera.read()返回一个2元组。元组第一个值是grabbed,表明是否成功从缓冲中读取frame。元组第二个值为frame本身
text = "not exist"
#表明正在监控的房间“没有被占领”。如果确实有活动,就更新该字符串
if not grabbed:
break
#调整该帧的大小,转换为灰阶图像并且对其进行高斯模糊
frame = imutils.resize(frame, width = 500)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)#灰阶图片
gray = cv2.GaussianBlur(gray, (21, 21), 0)#高斯模糊

#如果第一帧是None, 对其进行初始化
if firstFrame is None:
firstFrame = gray
continue

#计算当前帧和第一帧的不同
frameDelta = cv2.absdiff(firstFrame, gray)#两幅图的差的绝对值输出到另一幅图上面来

thresh = cv2.threshold(frameDelta, 25, 255, cv2.THRESH_BINARY)[1]#黑白二值化

#扩展阈值图像填充孔洞,然后找到阈值图像上的轮廓
thresh = cv2.dilate(thresh, None, iterations = 2)#图像膨胀
(cnts, _) = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE
)#findcontours函数会“原地”修改输入的图像,只检测的外轮廓,仅保存矩形4个顶点


#遍历轮廓
for c in cnts:
#如果轮廓太小,忽视轮廓
if cv2.contourArea(c)<args["min_area"]:
continue

#计算轮廓边界,在当前帧中画出该框,并更新text
(x, y, w, h) = cv2.boundingRect(c)
cv2.rectangle(frame, (x, y), (x + w,y + h), (0, 255, 255), 2)
text = "exist"

#在当前帧上写文字以及时间戳
cv2.putText(frame, "room stats:{}".format(text), (10, 20),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 1)
cv2.putText(frame, datetime.datetime.now().strftime("%A %d %B %Y %I:%M:%S%p"),
(10, frame.shape[0] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.4, (0, 0, 255), 1)

#显示当前帧
cv2.imshow("二值化图像", thresh)
cv2.imshow("差值图像", frameDelta)
cv2.imshow("监控", frame)
cv2.waitKey(10)

#对环境渐变的适应
flag = True#标记是否值得更新(第一帧)背景帧
for c in cnts:
if cv2.contourArea(c)>args["min_area"]//4:
flag = False
if flag is True:#新背景=旧背景*(1-0.618)+当前无物体背景*(0.618)
firstFrame = cv2.addWeighted(firstFrame, 1-0.618, gray, 0.618, 0.0)
#cv2.imwrite("Security Feed.png", frame)
#cv2.imwrite("Thresh.png", thresh)
#cv2.imwrite("Frame delta.png", frameDelta)
#cv2.waitKey(0)
#清理摄像机资源并关闭打开的窗口
camera.release()
cv2.destroyAllWindows()

前段时间的,新生工程体验课上,两人一组,靠厂家提供的元器件和烧录代码,焊接了了一台智能小车。

最进,碰巧手头有空闲的一块树莓派,本来打算用树莓派去实现远程控制空调,但发现空调的红外编码带有逻辑控制,只能退而求其次,试试远程控制小车,大体框架结构如图。


2017-07-03更新,已经实现对空调类带逻辑编码设备的简单控制。


烧录系统

几乎所有的新手教程都使用Win32DiskImager作为系统安装工具——中文的、英文的、官方的、eLinux wiki的,不一而足。
但是这个工具不支持中文目录名(文件或目录有中文,会出现123错误),不支持压缩,必须先插好SD卡,再开软件。
而USB Image Tool,就是Win32DiskImager的一个更方便的替代品。

写SD卡:直接读取zip压缩包

USB Image Tool可以直读.zip压缩包。网上下载的zip格式系统镜像,下完直接可以烧录。
点击Restore,选择.zip文件即可。注意打开对话框中默认看不到.zip文件,在“文件类型”处选择“All Files (.)”即可。

SSH无法连接问题

自从2016年11月开始,树莓派官方推荐 Raspbian 系统镜像关闭了默认ssh连接,重新开启也很简单,把SD卡拔下来,进入到根目录,新建一个名为ssh的空白文件(无后缀)就可以。

好了然后再把卡插回树莓派,就可以使用SSH了。

  • 初始用户名:pi
  • 初始密码:raspberry

将红外接受管和发射管连接至树莓派GPIO接口

材料:

红外接受管(3pin),红外接受管(2pin),杜邦线若干。

根据不同树莓派版本,查看GPIO的引线图,该实验采用B+版,具体实物对应图和GPIO与pin对应图如下图:

硬件连接

红外接收器

  • vcc 连 pin1 (3.3v)

  • gnd 连 pin6(ground)

  • data 连 pin12(gpio18)

红外发射器

  • gnd 连 pin25(ground)

  • data 连 pin11(gpio17)

红外接受器规格见图,左引脚为data,中为接地,右为3.3V供电

红外发射器规格见图,长脚为data,短脚为接地

接收器和发射器通过杜邦线跟树莓派相连,最后的连接实物图

预先解析控制码

修改 raspbian 仓库默认源

  1. 修改apt源
1
sudo nano /etc/apt/sources.list

例如使用大连东软信息学院软件源镜像,修改之后的内容如下:

1
deb http://mirrors.aliyun.com/raspbian/raspbian jessie main contrib non-free rpi

其他可用源如下:

  1. 更新软件源和软件
1
2
3
4
# 更新软件源
sudo apt-get update
# 更新软件
sudo apt-get upgrade

更换vi文本编译器为vim

因为vi在insert模式下,方向键会变为ABCD,故用vim进行替换

1
2
3
4
#卸载vi
sudo apt-get remove vi-common
#安装vim
sudo apt-get install -y vim

安装lirc

LIRC (Linux Infrared remote control)是一个linux系统下开源的软件包。这个软件可以让Linux系统接收及发送红外线信号。

1
sudo apt-get install lirc

配置硬件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# sudo vim /boot/config.txt #在文件结尾添加
# 修改一下内容
dtoverlay=lirc-rpi
gpio_in_pin=18
gpio_out_pin=17

# sudo vim /etc/lirc/hardware.conf #编辑LRIC的配置文件
# 修改以下内容
LIRCD_ARGS="--uinput"
DRIVER="default"
DEVICE="/dev/lirc0"
MODULES="lirc_rpi"

# 重启生效
sudo /etc/init.d/lirc restart

**注意:**配置gpio_in_pin和gpio_out_pin时,编号为GPIO号,并非pin号

启动测试

1
sudo mode2 -d /dev/lirc0

红外接收器已经打开,处于监听状态。这个时候,利用任何红外发射器(可以是电视遥控器或其他遥控器)对红外接收模块按任意按钮,就可以在树莓派终端上看到类似如下的代码

看到这个代码便证明红外接收模块是正常工作的。

如果没有看到,请检查你的接线、电压、以及通过lsusb查看是否加载了相应模块。

1
2
3
4
5
6
pulse 1681
space 4816
pulse 1695
space 4784
pulse 1333
space 3638

录制解析控制码

  1. 开始录制
1
irrecord -d /dev/lirc0 ~/lircd.conf #按照提示操作即可,录制完后会让你输入按键名
  1. 查看可用键名列表
1
irrecord --list-namespace
  1. 将已录制的编码加载进 lirc 配置参数
1
sudo cp ~/lircd.conf /etc/lirc/lircd.conf

通过树莓派发射红外编码

  1. 启动lircd服务
1
sudo lircd -d /dev/lirc0
  1. 查看录制好可以使用的键名
1
irsend LIST /home/pi/lircd.conf ""
  1. 发送红外编码
1
irsend SEND_ONCE /home/pi/lircd.conf KEY_XXX

演示效果


关于录制带逻辑编码的红外编码

一个比较令人兴奋的消息,谢谢博客http://blog.just4fun.site/raspberrypi-lirc.html的帮助,直接发送raw原始码就可以实现简单的控制程序。😘

**注意:**其只能使用raw原始码,记录是通过mode2命令实现。

  1. 制作模版(不设置按键,初始化玩直接跳过)
1
2
sudo /etc/init.d/lirc restart
irrecord -f -d /dev/lirc0 ~/lircd.conf
  1. 录制需要实现的按键
1
2
3
4
5
6
7
8
9
mode2  -d /dev/lirc0 > /tmp/temp.code  
cat /tmp/temp.code | sed -n '2,$p' | grep -o -E "[0-9]+" | xargs echo # 移除第一行,之后把所有数字取出

# 把上述指令写入 ~/lircd.conf 的 KEY_OPEN里
# 值得注意的是 ~/lircd.conf文件里的空格十分重要

sudo cp ~/lircd.conf /etc/lirc/lircd.conf
sudo /etc/init.d/lirc restart
# irsend LIST /home/pi/lircd.conf "" #列出指令
  1. 最后一个参考格式的lircd.conf文件(保证空格正确)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
begin remote

name /home/pi/lircd.conf
flags RAW_CODES
eps 30
aeps 100

gap 8015

begin raw_codes

name KEY_POWER
8927 4522 531 1711 551 1706 559 598 549 599 551 600 551 598 551 597 552 1719 558 597 549 1715 549 1724 540 614 535 592 559 597 550 599 551 610 551 602 549 598 553 1706 558 598 549 601 549 599 550 601 548 614 551 593 557 1717 545 598 551 598 552 598 552 599 549 598 553 1720 556 597 563 589 549 600 549 601 549 607 545 593 555 599 551 614 548 598 551 598 551 600 550 594 604 548 555 597 551 599 551 597 573 7967 558 597 549 598 548 603 548 601 554 598 550 599 550 600 545 619 549 600 545 599 556 598 551 600 549 611 541 597 551 599 551 609 548 601 555 598 552 596 554 598 550 598 563 587 551 600 543 615 556 598 550 598 551 599 576 574 552 596 552 598 552 613 538 612 551 595 552 597 553 598 552 599 552 596 552 1720 545 596 552 610 551 599 551 599 575 575 551 593 559 595 553 598 552 598 549 612 552 598 551 1705 559 597 574 1689 550 1724 540 598 552 592 559 609 553 599 548 598 552 1711 551 1705 560 1708 553 1711 550 599 553 1716 563 7970 559 597 551 600 573 578 550 599 551 600 575 573 565 589 575 586 552 1710 554 597 556 596 553 597 549 604 552 600 550 599 551 614 551 598 552 599 552 599 548 602 553 598 550 1713 552 599 552 613 593 558 545 604 564 586 552 598 552 598 554 595 554 601 546 617 546 607 550 597 551 611 541 597 553 598 553 598 580 572 548 615 552 599 554 596 552 599 551 598 554 598 547 614 536 604 552 609 554 1714 548 598 556 597 548 599 553 601 553 1711 553 598 553 593 549

end raw_codes

end remote
  1. 启动服务,运行指令
1
2
sudo lircd -d /dev/lirc0
irsend SEND_ONCE /home/pi/lircd.conf KEY_POWER
0%