«
树莓派实现红外遥控信号收发

时间:2022-7-13    作者:Deri    分类:


主要参考以下两篇指导,注意,不同系统版本可能方式有差异。
https://blog.csdn.net/Destinyabc/article/details/107907251

https://segmentfault.com/a/1190000014135418

第一步:硬件接线

红外信号接收

红外接收器 树莓派
电源正极+ 5V
电源负极- GND
信号S 17(BCM编码)

红外信号发射

红外发射二极管 树莓派
负极- GND
正极+ 18(BCM编码)

注:此处加三极管可增强信号强度

第二步:系统中配置管脚号

sudo nano /boot/config.txt
# Uncomment this to enable infrared communication.
#去掉下面的注释,修改引脚号
dtoverlay=gpio-ir,gpio_pin=17
dtoverlay=gpio-ir-tx,gpio_pin=18

第三步:安装软件

sudo apt-get install lirc

#更新配置
sudo nano /etc/lirc/lirc_options.conf

# 把:
driver = devinput
device = auto

# 修改为:
driver = default
device = /dev/lirc0

重启树莓派,必须!

第四步:测试接收信号

# 必须停止lircd服务才能进入接收红外信号模式
sudo service lircd stop
mode2 -d /dev/lirc0

看到如下输出则表示接收正常

space 16777215
pulse 8999
space 4457
pulse 680
space 1627
......

第五步:创建一个遥控器.lirc.conf配置文件(可跳过直接到第六步)

新建一个文件夹存放配置文件

sudo mkdir ~/lirc
cd ~/lirc
sudo irrecord -f -d /dev/lirc0    按提示,按回车
等待几秒钟,不要按键
输入遥控器名称(英文,如TV),注意不是按键名称
回车,开始按遥控器的键(任意键),要按几十次,每按一次出现一个点.直到出现提示
出现提示后,按回车结束并保存
此时在目录下生成了一个文件,如TV.lircd.conf
注意!这个文件大概率没用,我们只要他的格式。

第六步:复制配置文件

上一步拿到的文件内容格式如下,接下来修改内容:

将文件命名为xxx.lircd.conf后,复制到/etc/lirc/目录下即可

# 前边是一大片注释

begin remote

 name  mini_con
 flags RAW_CODES|CONST_LENGTH
 eps            30
 aeps          100

 gap          108106

     begin raw_codes

         name KEY_1
            9100    4521     628   

         name KEY_2
            9820    4520     556

        end raw_codes

end remote

按键名称规范

尽量使用允许的按键名,查询
irrecord -l

或者参考如下:
KEY_0
KEY_1
KEY_102ND
KEY_10CHANNELSDOWN
KEY_10CHANNELSUP
KEY_2
KEY_3
KEY_3D_MODE
KEY_4
KEY_5
KEY_6
KEY_7
KEY_8
KEY_9
KEY_A
KEY_AB
KEY_ADDRESSBOOK
KEY_AGAIN
KEY_ALS_TOGGLE
KEY_ALTERASE
KEY_ANGLE
KEY_APOSTROPHE
KEY_APPSELECT
KEY_ARCHIVE
KEY_ASPECT_RATIO
KEY_ASSISTANT
KEY_ATTENDANT_OFF
KEY_ATTENDANT_ON
KEY_ATTENDANT_TOGGLE
KEY_AUDIO
KEY_AUDIO_DESC
KEY_AUX
KEY_B
KEY_BACK
KEY_BACKSLASH
KEY_BACKSPACE
KEY_BASSBOOST
KEY_BATTERY
KEY_BLUE
KEY_BLUETOOTH
KEY_BOOKMARKS
KEY_BREAK
KEY_BRIGHTNESSDOWN
KEY_BRIGHTNESSUP
KEY_BRIGHTNESS_AUTO
KEY_BRIGHTNESS_CYCLE
KEY_BRIGHTNESS_MAX
KEY_BRIGHTNESS_MIN
KEY_BRL_DOT1
KEY_BRL_DOT10
KEY_BRL_DOT2
KEY_BRL_DOT3
KEY_BRL_DOT4
KEY_BRL_DOT5
KEY_BRL_DOT6
KEY_BRL_DOT7
KEY_BRL_DOT8
KEY_BRL_DOT9
KEY_BUTTONCONFIG
KEY_C
KEY_CALC
KEY_CALENDAR
KEY_CAMERA
KEY_CAMERA_DOWN
KEY_CAMERA_FOCUS
KEY_CAMERA_LEFT
KEY_CAMERA_RIGHT
KEY_CAMERA_UP
KEY_CAMERA_ZOOMIN
KEY_CAMERA_ZOOMOUT
KEY_CANCEL
KEY_CAPSLOCK
KEY_CD
KEY_CHANNEL
KEY_CHANNELDOWN
KEY_CHANNELUP
KEY_CHAT
KEY_CLEAR
KEY_CLOSE
KEY_CLOSECD
KEY_COFFEE
KEY_COMMA
KEY_COMPOSE
KEY_COMPUTER
KEY_CONFIG
KEY_CONNECT
KEY_CONTEXT_MENU
KEY_CONTROLPANEL
KEY_COPY
KEY_CUT
KEY_CYCLEWINDOWS
KEY_D
KEY_DASHBOARD
KEY_DATA
KEY_DATABASE
KEY_DELETE
KEY_DELETEFILE
KEY_DEL_EOL
KEY_DEL_EOS
KEY_DEL_LINE
KEY_DIGITS
KEY_DIRECTORY
KEY_DISPLAYTOGGLE
KEY_DISPLAY_OFF
KEY_DOCUMENTS
KEY_DOLLAR
KEY_DOT
KEY_DOWN
KEY_DVD
KEY_E
KEY_EDIT
KEY_EDITOR
KEY_EJECTCD
KEY_EJECTCLOSECD
KEY_EMAIL
KEY_END
KEY_ENTER
KEY_EPG
KEY_EQUAL
KEY_ESC
KEY_EURO
KEY_EXIT
KEY_F
KEY_F1
KEY_F10
KEY_F11
KEY_F12
KEY_F13
KEY_F14
KEY_F15
KEY_F16
KEY_F17
KEY_F18
KEY_F19
KEY_F2
KEY_F20
KEY_F21
KEY_F22
KEY_F23
KEY_F24
KEY_F3
KEY_F4
KEY_F5
KEY_F6
KEY_F7
KEY_F8
KEY_F9
KEY_FASTFORWARD
KEY_FASTREVERSE
KEY_FAVORITES
KEY_FILE
KEY_FINANCE
KEY_FIND
KEY_FIRST
KEY_FN
KEY_FN_1
KEY_FN_2
KEY_FN_B
KEY_FN_D
KEY_FN_E
KEY_FN_ESC
KEY_FN_F
KEY_FN_F1
KEY_FN_F10
KEY_FN_F11
KEY_FN_F12
KEY_FN_F2
KEY_FN_F3
KEY_FN_F4
KEY_FN_F5
KEY_FN_F6
KEY_FN_F7
KEY_FN_F8
KEY_FN_F9
KEY_FN_RIGHT_SHIFT
KEY_FN_S
KEY_FORWARD
KEY_FORWARDMAIL
KEY_FRAMEBACK
KEY_FRAMEFORWARD
KEY_FRONT
KEY_FULL_SCREEN
KEY_G
KEY_GAMES
KEY_GOTO
KEY_GRAPHICSEDITOR
KEY_GRAVE
KEY_GREEN
KEY_H
KEY_HANGEUL
KEY_HANGUP_PHONE
KEY_HANJA
KEY_HELP
KEY_HENKAN
KEY_HIRAGANA
KEY_HOME
KEY_HOMEPAGE
KEY_HP
KEY_I
KEY_IMAGES
KEY_INFO
KEY_INSERT
KEY_INS_LINE
KEY_ISO
KEY_J
KEY_JOURNAL
KEY_K
KEY_KATAKANA
KEY_KATAKANAHIRAGANA
KEY_KBDILLUMDOWN
KEY_KBDILLUMTOGGLE
KEY_KBDILLUMUP
KEY_KBDINPUTASSIST_ACCEPT
KEY_KBDINPUTASSIST_CANCEL
KEY_KBDINPUTASSIST_NEXT
KEY_KBDINPUTASSIST_NEXTGROUP
KEY_KBDINPUTASSIST_PREV
KEY_KBDINPUTASSIST_PREVGROUP
KEY_KBD_LAYOUT_NEXT
KEY_KBD_LCD_MENU1
KEY_KBD_LCD_MENU2
KEY_KBD_LCD_MENU3
KEY_KBD_LCD_MENU4
KEY_KBD_LCD_MENU5
KEY_KEYBOARD
KEY_KP0
KEY_KP1
KEY_KP2
KEY_KP3
KEY_KP4
KEY_KP5
KEY_KP6
KEY_KP7
KEY_KP8
KEY_KP9
KEY_KPASTERISK
KEY_KPCOMMA
KEY_KPDOT
KEY_KPENTER
KEY_KPEQUAL
KEY_KPJPCOMMA
KEY_KPLEFTPAREN
KEY_KPMINUS
KEY_KPPLUS
KEY_KPPLUSMINUS
KEY_KPRIGHTPAREN
KEY_KPSLASH
KEY_L
KEY_LANGUAGE
KEY_LAST
KEY_LEFT
KEY_LEFTALT
KEY_LEFTBRACE
KEY_LEFTCTRL
KEY_LEFTMETA
KEY_LEFTSHIFT
KEY_LEFT_DOWN
KEY_LEFT_UP
KEY_LIGHTS_TOGGLE
KEY_LINEFEED
KEY_LIST
KEY_LOGOFF
KEY_M
KEY_MACRO
KEY_MACRO1
KEY_MACRO10
KEY_MACRO11
KEY_MACRO12
KEY_MACRO13
KEY_MACRO14
KEY_MACRO15
KEY_MACRO16
KEY_MACRO17
KEY_MACRO18
KEY_MACRO19
KEY_MACRO2
KEY_MACRO20
KEY_MACRO21
KEY_MACRO22
KEY_MACRO23
KEY_MACRO24
KEY_MACRO25
KEY_MACRO26
KEY_MACRO27
KEY_MACRO28
KEY_MACRO29
KEY_MACRO3
KEY_MACRO30
KEY_MACRO4
KEY_MACRO5
KEY_MACRO6
KEY_MACRO7
KEY_MACRO8
KEY_MACRO9
KEY_MACRO_PRESET1
KEY_MACRO_PRESET2
KEY_MACRO_PRESET3
KEY_MACRO_PRESET_CYCLE
KEY_MACRO_RECORD_START
KEY_MACRO_RECORD_STOP
KEY_MAIL
KEY_MAX
KEY_MEDIA
KEY_MEDIA_REPEAT
KEY_MEDIA_TOP_MENU
KEY_MEMO
KEY_MENU
KEY_MESSENGER
KEY_MHP
KEY_MICMUTE
KEY_MINUS
KEY_MODE
KEY_MOVE
KEY_MP3
KEY_MSDOS
KEY_MUHENKAN
KEY_MUTE
KEY_N
KEY_NEW
KEY_NEWS
KEY_NEXT
KEY_NEXTSONG
KEY_NEXT_FAVORITE
KEY_NOTIFICATION_CENTER
KEY_NUMERIC_0
KEY_NUMERIC_1
KEY_NUMERIC_11
KEY_NUMERIC_12
KEY_NUMERIC_2
KEY_NUMERIC_3
KEY_NUMERIC_4
KEY_NUMERIC_5
KEY_NUMERIC_6
KEY_NUMERIC_7
KEY_NUMERIC_8
KEY_NUMERIC_9
KEY_NUMERIC_A
KEY_NUMERIC_B
KEY_NUMERIC_C
KEY_NUMERIC_D
KEY_NUMERIC_POUND
KEY_NUMERIC_STAR
KEY_NUMLOCK
KEY_O
KEY_OK
KEY_ONSCREEN_KEYBOARD
KEY_OPEN
KEY_OPTION
KEY_P
KEY_PAGEDOWN
KEY_PAGEUP
KEY_PASTE
KEY_PAUSE
KEY_PAUSECD
KEY_PAUSE_RECORD
KEY_PC
KEY_PHONE
KEY_PICKUP_PHONE
KEY_PLAY
KEY_PLAYCD
KEY_PLAYER
KEY_PLAYPAUSE
KEY_POWER
KEY_POWER2
KEY_PRESENTATION
KEY_PREVIOUS
KEY_PREVIOUSSONG
KEY_PRINT
KEY_PRIVACY_SCREEN_TOGGLE
KEY_PROG1
KEY_PROG2
KEY_PROG3
KEY_PROG4
KEY_PROGRAM
KEY_PROPS
KEY_PVR
KEY_Q
KEY_QUESTION
KEY_R
KEY_RADIO
KEY_RECORD
KEY_RED
KEY_REDO
KEY_REFRESH
KEY_REPLY
KEY_RESERVED
KEY_RESTART
KEY_REWIND
KEY_RFKILL
KEY_RIGHT
KEY_RIGHTALT
KEY_RIGHTBRACE
KEY_RIGHTCTRL
KEY_RIGHTMETA
KEY_RIGHTSHIFT
KEY_RIGHT_DOWN
KEY_RIGHT_UP
KEY_RO
KEY_ROOT_MENU
KEY_ROTATE_DISPLAY
KEY_ROTATE_LOCK_TOGGLE
KEY_S
KEY_SAT
KEY_SAT2
KEY_SAVE
KEY_SCALE
KEY_SCREENSAVER
KEY_SCROLLDOWN
KEY_SCROLLLOCK
KEY_SCROLLUP
KEY_SEARCH
KEY_SELECT
KEY_SELECTIVE_SCREENSHOT
KEY_SEMICOLON
KEY_SEND
KEY_SENDFILE
KEY_SETUP
KEY_SHOP
KEY_SHUFFLE
KEY_SLASH
KEY_SLEEP
KEY_SLOW
KEY_SLOWREVERSE
KEY_SOUND
KEY_SPACE
KEY_SPELLCHECK
KEY_SPORT
KEY_SPREADSHEET
KEY_STOP
KEY_STOPCD
KEY_STOP_RECORD
KEY_SUBTITLE
KEY_SUSPEND
KEY_SWITCHVIDEOMODE
KEY_SYSRQ
KEY_T
KEY_TAB
KEY_TAPE
KEY_TASKMANAGER
KEY_TEEN
KEY_TEXT
KEY_TIME
KEY_TITLE
KEY_TOUCHPAD_OFF
KEY_TOUCHPAD_ON
KEY_TOUCHPAD_TOGGLE
KEY_TUNER
KEY_TV
KEY_TV2
KEY_TWEN
KEY_U
KEY_UNDO
KEY_UNKNOWN
KEY_UNMUTE
KEY_UP
KEY_UWB
KEY_V
KEY_VCR
KEY_VCR2
KEY_VENDOR
KEY_VIDEO
KEY_VIDEOPHONE
KEY_VIDEO_NEXT
KEY_VIDEO_PREV
KEY_VOD
KEY_VOICECOMMAND
KEY_VOICEMAIL
KEY_VOLUMEDOWN
KEY_VOLUMEUP
KEY_W
KEY_WAKEUP
KEY_WLAN
KEY_WORDPROCESSOR
KEY_WPS_BUTTON
KEY_WWAN
KEY_WWW
KEY_X
KEY_XFER
KEY_Y
KEY_YELLOW
KEY_YEN
KEY_Z
KEY_ZENKAKUHANKAKU
KEY_ZOOMIN
KEY_ZOOMOUT
KEY_ZOOMRESET
BTN_0
BTN_1
BTN_2
BTN_3
BTN_4
BTN_5
BTN_6
BTN_7
BTN_8
BTN_9
BTN_BACK
BTN_BASE
BTN_BASE2
BTN_BASE3
BTN_BASE4
BTN_BASE5
BTN_BASE6
BTN_C
BTN_DEAD
BTN_DIGI
BTN_DPAD_DOWN
BTN_DPAD_LEFT
BTN_DPAD_RIGHT
BTN_DPAD_UP
BTN_EAST
BTN_EXTRA
BTN_FORWARD
BTN_GAMEPAD
BTN_GEAR_DOWN
BTN_GEAR_UP
BTN_JOYSTICK
BTN_LEFT
BTN_MIDDLE
BTN_MISC
BTN_MODE
BTN_MOUSE
BTN_NORTH
BTN_PINKIE
BTN_RIGHT
BTN_SELECT
BTN_SIDE
BTN_SOUTH
BTN_START
BTN_STYLUS
BTN_STYLUS2
BTN_STYLUS3
BTN_TASK
BTN_THUMB
BTN_THUMB2
BTN_THUMBL
BTN_THUMBR
BTN_TL
BTN_TL2
BTN_TOOL_AIRBRUSH
BTN_TOOL_BRUSH
BTN_TOOL_DOUBLETAP
BTN_TOOL_FINGER
BTN_TOOL_LENS
BTN_TOOL_MOUSE
BTN_TOOL_PEN
BTN_TOOL_PENCIL
BTN_TOOL_QUADTAP
BTN_TOOL_QUINTTAP
BTN_TOOL_RUBBER
BTN_TOOL_TRIPLETAP
BTN_TOP
BTN_TOP2
BTN_TOUCH
BTN_TR
BTN_TR2
BTN_TRIGGER
BTN_TRIGGER_HAPPY
BTN_TRIGGER_HAPPY1
BTN_TRIGGER_HAPPY10
BTN_TRIGGER_HAPPY11
BTN_TRIGGER_HAPPY12
BTN_TRIGGER_HAPPY13
BTN_TRIGGER_HAPPY14
BTN_TRIGGER_HAPPY15
BTN_TRIGGER_HAPPY16
BTN_TRIGGER_HAPPY17
BTN_TRIGGER_HAPPY18
BTN_TRIGGER_HAPPY19
BTN_TRIGGER_HAPPY2
BTN_TRIGGER_HAPPY20
BTN_TRIGGER_HAPPY21
BTN_TRIGGER_HAPPY22
BTN_TRIGGER_HAPPY23
BTN_TRIGGER_HAPPY24
BTN_TRIGGER_HAPPY25
BTN_TRIGGER_HAPPY26
BTN_TRIGGER_HAPPY27
BTN_TRIGGER_HAPPY28
BTN_TRIGGER_HAPPY29
BTN_TRIGGER_HAPPY3
BTN_TRIGGER_HAPPY30
BTN_TRIGGER_HAPPY31
BTN_TRIGGER_HAPPY32
BTN_TRIGGER_HAPPY33
BTN_TRIGGER_HAPPY34
BTN_TRIGGER_HAPPY35
BTN_TRIGGER_HAPPY36
BTN_TRIGGER_HAPPY37
BTN_TRIGGER_HAPPY38
BTN_TRIGGER_HAPPY39
BTN_TRIGGER_HAPPY4
BTN_TRIGGER_HAPPY40
BTN_TRIGGER_HAPPY5
BTN_TRIGGER_HAPPY6
BTN_TRIGGER_HAPPY7
BTN_TRIGGER_HAPPY8
BTN_TRIGGER_HAPPY9
BTN_WEST
BTN_WHEEL
BTN_Z

第七步:获取正确的红外信号

mode2 -m -d /dev/lirc1

# 开始录入,配置 /etc/lirc/lircd.conf 文件
# 按要配置的键(比如 1 ),会有类似输出
    620000
        9170     4441      640      552      604      554
         609      552      635      528      612      551
         601      556      634      528      609      553
         614     1629      610     1632      635     1615
         627     1619      596     1602      639     1629
         611     1618      616     1605      633     1607
         638      552      610     1604      633     1615
         596      562      621      541      594      567
         595      564      568      594      593     1649
         566      598      568      601      591     1678
         516     1697      556     1692      547     1683
         546   132000

复制第一个数和最后一个数(这两个数会相对比较大)之间的内容
粘贴到上面conf文件的按钮名称下面,建议每个key配置后留一空行
注意空格要严格复制不能修改;
注意,最后一个大数可能没有,则复制第一个大数后面的内容
name KEY_1
xxxx xxxx xxx
...

空行

name KEY_2
       xxxx    xxxx     xxxx
       ...

第八步:测试信号接收

sudo service lircd restart # 重启服务(必须!!!!)
irw

按一下配置的键,就应该可以显示结果了,如下:
xxxxxxxxx 0xXX KEY_1 mini_con

第九步:根据遥控按键执行动作

如,按键关机;
在用户目录下配置一个文件
sudo nano ~/.lircrc

内容为:

begin
        prog = irexec
        button = KEY_1
        config = python3 /root/pydata/lirc_commond/list_root.py && bash /root/pydata/lirc_commond/end.sh
end

begin
        prog = irexec
        button = KEY_2
        config = echo "This key is not set."
end

#把button替换成按键名(这里没有遥控器名)
#config后面替换成需要执行的命令

第十步:发射红外信号

# 发射命令:irsend SEND_ONCE 遥控器名称 按钮名称
irsend SEND_ONCE TV KEY_OPEN

如果报错“Error running command: Input/output error”
尝试修改conf文件中的
“ flags RAW_CODES|CONST_LENGTH”
改为
“ flags RAW_CODES”