- 浏览: 2203403 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1240)
- mac/IOS (287)
- flutter (1)
- J2EE (115)
- android基础知识 (582)
- android中级知识 (55)
- android组件(Widget)开发 (18)
- android 错误 (21)
- javascript (18)
- linux (70)
- 树莓派 (18)
- gwt/gxt (1)
- 工具(IDE)/包(jar) (18)
- web前端 (17)
- java 算法 (8)
- 其它 (5)
- chrome (7)
- 数据库 (8)
- 经济/金融 (0)
- english (2)
- HTML5 (7)
- 网络安全 (14)
- 设计欣赏/设计窗 (8)
- 汇编/C (8)
- 工具类 (4)
- 游戏 (5)
- 开发频道 (5)
- Android OpenGL (1)
- 科学 (4)
- 运维 (0)
- 好东西 (6)
- 美食 (1)
最新评论
-
liangzai_cool:
请教一下,文中,shell、C、Python三种方式控制led ...
树莓派 - MAX7219 -
jiazimo:
...
Kafka源码分析-序列5 -Producer -RecordAccumulator队列分析 -
hp321:
Windows该命令是不是需要安装什么软件才可以?我试过不行( ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
hp321:
Chenzh_758 写道其实直接用一下代码就可以解决了:JP ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
huanghonhpeng:
大哥你真强什么都会,研究研究。。。。小弟在这里学到了很多知识。 ...
android 浏览器
网上淘到了一个红外接收器(HX1838+NEC编码红外遥控器)和一个红外遥控器,准备放到树莓派上学习一下红外控制。
不知道为什么接受器带灯的那个距离感应很近,不知道为什么,这里就不用带灯的,用下图两个,一个接收器和控制器
1.正面对准自己,然后从左到右三个头分别是如下图,插到对应的树莓派上
2.安装lirc,修改配置文件
LIRC (Linux Infrared remote control)是一个linux系统下开源的软件包。这个软件可以让Linux系统接收及发送红外线信号。
这里要重点说明一下,安装上之后网上基本上文章都是说修改/etc/lirc/hardware.conf这个文件,但是我装上lirc最新版(0.9.2)之后根本就找不到这个配置文件,修改的不是hardware.conf这文件,修改/etc/lirc/lirc_options.conf这个文件,把这个文件中对应以下几个参数修改一下
3.修改/boot/config.txt文件,这里26是对应bcm树莓派上的gpio接口:
4.重新开启lirc功能,至此lirc软件就配置完成了。
5.关闭红外线接收功能
首先关闭lirc软件,然后执行如下命令:
6.测试红外接收
用红外遥控器,对着接收器按下任意按键,屏幕会打印类似下面的内容,说明红外接收功能正常。
7.红外编码录制
可查看有哪些按键名并记录下来,然后执行红外线编码录制命令
开始时需要输入一下别名,最后会根据此名称保存对应的文件名,我这里起的:pi
按提示需要输入两次按键次数,需要多少次记不清楚了,你只要来回把按钮全按一遍一直按到提示结束,接下来就是根据上面记录下来的按键名称来点击控制器上对应的按钮,把控制器上所有按钮全部对应到一个不同的按按键名上,如果全部完成之后多按一次回车,提示结束,但这里还需要随便再按一次按钮才会保存成功,成功之后会在~/目录下生成pi.lircd.conf这个文件,只要把这个文件放到/etc/lirc/lircd.conf.d/这个目录里就行了,执行:
下面是我生成的pi.lircd.conf此文件内容:
完成之后重启树莓派
8.接下来就是编写代码,我这里给出两种语言的代码,一个是c语言的,一个是python语言的代码,都是调用通过
c代码(必须要提前安装上bcm2835的库,从网上百度吧很多):
写好之后编译运行c文件:
按下遥控按键,终端会显示接到到按键的键值
下面再说下python代码:
按下遥控按键,终端会显示接到到按键的键值
不知道为什么接受器带灯的那个距离感应很近,不知道为什么,这里就不用带灯的,用下图两个,一个接收器和控制器
1.正面对准自己,然后从左到右三个头分别是如下图,插到对应的树莓派上
2.安装lirc,修改配置文件
LIRC (Linux Infrared remote control)是一个linux系统下开源的软件包。这个软件可以让Linux系统接收及发送红外线信号。
sudo apt-get install lirc
这里要重点说明一下,安装上之后网上基本上文章都是说修改/etc/lirc/hardware.conf这个文件,但是我装上lirc最新版(0.9.2)之后根本就找不到这个配置文件,修改的不是hardware.conf这文件,修改/etc/lirc/lirc_options.conf这个文件,把这个文件中对应以下几个参数修改一下
#driver = devinput driver = default #device = /dev/lirc0 device = auto
3.修改/boot/config.txt文件,这里26是对应bcm树莓派上的gpio接口:
dtoverlay=lirc-rpi,gpio_in_pin=26
4.重新开启lirc功能,至此lirc软件就配置完成了。
sudo /etc/init.d/lircd restart sudo modprobe lirc_rpi
5.关闭红外线接收功能
首先关闭lirc软件,然后执行如下命令:
sudo kill $(pidof lircd)
6.测试红外接收
mode2 -d /dev/lirc0
用红外遥控器,对着接收器按下任意按键,屏幕会打印类似下面的内容,说明红外接收功能正常。
引用
space 16300
pulse 95
space 28794
pulse 80
space 19395
pulse 95
space 28794
pulse 80
space 19395
7.红外编码录制
irrecord --list-namespace
可查看有哪些按键名并记录下来,然后执行红外线编码录制命令
irrecord -d /dev/lirc0 ~/lircd.conf
开始时需要输入一下别名,最后会根据此名称保存对应的文件名,我这里起的:pi
按提示需要输入两次按键次数,需要多少次记不清楚了,你只要来回把按钮全按一遍一直按到提示结束,接下来就是根据上面记录下来的按键名称来点击控制器上对应的按钮,把控制器上所有按钮全部对应到一个不同的按按键名上,如果全部完成之后多按一次回车,提示结束,但这里还需要随便再按一次按钮才会保存成功,成功之后会在~/目录下生成pi.lircd.conf这个文件,只要把这个文件放到/etc/lirc/lircd.conf.d/这个目录里就行了,执行:
sudo cp ~/pi.lircd.conf /etc/lirc/lircd.conf.d/
下面是我生成的pi.lircd.conf此文件内容:
# Please take the time to finish this file as described in # https://sourceforge.net/p/lirc-remotes/wiki/Checklist/ # and make it available to others by sending it to # <lirc@bartelmus.de> # # This config file was automatically generated # using lirc-0.9.4c(default) on Sat Feb 24 13:30:19 2018 # Command line used: -d /dev/lirc0 /home/pi/lircd.conf # Kernel version (uname -r): 4.9.59-v7+ # # Remote name (as of config file): pi # Brand of remote device, the thing you hold in your hand: # Remote device model nr: # Remote device info url: # Does remote device has a bundled capture device e. g., a # usb dongle? : # For bundled USB devices: usb vendor id, product id # and device string (use dmesg or lsusb): # Type of device controlled # (TV, VCR, Audio, DVD, Satellite, Cable, HTPC, ...) : # Device(s) controlled by this remote: begin remote name pi bits 32 flags SPACE_ENC|CONST_LENGTH eps 30 aeps 100 header 8994 4467 one 583 1641 zero 583 570 ptrail 583 repeat 8994 2217 gap 107314 toggle_bit_mask 0x0 frequency 38000 begin codes KEY_0 0x00FF6897 0x7ED25DBC KEY_1 0x00FF30CF 0x7ED25DBC KEY_2 0x00FF18E7 0x7ED25DBC KEY_3 0x00FF7A85 0x7ED25DBC KEY_4 0x00FF10EF 0x7ED25DBC KEY_5 0x00FF38C7 0x7ED25DBC KEY_6 0x00FF5AA5 0x7ED25DBC KEY_7 0x00FF42BD 0x7ED25DBC KEY_8 0x00FF4AB5 0x7ED25DBC KEY_9 0x00FF52AD 0x7ED25DBC KEY_CHANNEL 0x00FF629D 0x7ED25DBC KEY_CHANNELDOWN 0x00FFA25D 0x7ED25DBC KEY_CHANNELUP 0x00FFE21D 0x7ED25DBC KEY_PLAY 0x00FFC23D 0x7ED25DBC KEY_NEXT 0x00FF02FD 0x7ED25DBC KEY_PREVIOUS 0x00FF22DD 0x7ED25DBC KEY_VOLUMEDOWN 0x00FFE01F 0x7ED25DBC KEY_VOLUMEUP 0x00FFA857 0x7ED25DBC KEY_EQUAL 0x00FF906F 0x7ED25DBC KEY_A 0x00FF9867 0x7ED25DBC KEY_B 0x00FFB04F 0x7ED25DBC end codes end remote
完成之后重启树莓派
8.接下来就是编写代码,我这里给出两种语言的代码,一个是c语言的,一个是python语言的代码,都是调用通过
c代码(必须要提前安装上bcm2835的库,从网上百度吧很多):
#include <bcm2835.h> #include <stdio.h> #include <stdlib.h> #define PIN 26 #define IO bcm2835_gpio_lev(PIN) unsigned char i,idx,cnt; unsigned char count; unsigned char data[4]; static int flag = 0; int exec_cmd(unsigned char key_val){ switch(key_val) { case 0x45://CH- printf("Button CH-\n"); break; case 0x46://CH printf("Button CH\n"); break; case 0x47://CH+ printf("Button CH+\n"); break; case 0x44://PREV printf("Button PREV\n"); system("mpc prev"); break; case 0x40://NEXT printf("Button NEXT\n"); system("mpc next"); break; case 0x43://PLAY/PAUSE printf("Button PLAY/PAUSE\n"); if (flag == 0) { flag = 1; printf("mpc play\n"); //system("mpc play"); }else{ flag = 0; printf("mpc pause\n"); //system("mpc pause"); } break; case 0x07://VOL- printf("Button VOL-\n"); system("mpc volume -1"); break; case 0x15://VOL+ printf("Button VOL+\n"); system("mpc volume +1"); break; case 0x09://EQ printf("Button EQ\n"); break; case 0x16://0 printf("Button 0\n"); break; case 0x19://100+ printf("Button 100+\n"); break; case 0x0d://200+ printf("Button 200+\n"); break; case 0x0c://1 printf("Button 1\n"); break; case 0x18://2 printf("Button 2\n"); break; case 0x5e://3 printf("Button 3\n"); break; case 0x08://4 printf("Button 4\n"); break; case 0x1c://5 printf("Button 5\n"); break; case 0x5a://6 printf("Button 6\n"); break; case 0x42://7 printf("Button 7\n"); break; case 0x52://8 printf("Button 8\n"); break; case 0x4a://9 printf("Button 9\n"); break; default: break; } return 0; } int main(int argc, char const *argv[]){ if (!bcm2835_init()){ return 1; } bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_INPT); bcm2835_gpio_set_pud(PIN, BCM2835_GPIO_PUD_UP); printf("IRM Test Program ... \n"); while (1) { if (IO == 0) { count = 0; while (IO == 0 && count++ < 200) //9ms delayMicroseconds(60); count = 0; while (IO == 1 && count++ < 80) //4.5ms delayMicroseconds(60); idx = 0; cnt = 0; data[0]=0; data[1]=0; data[2]=0; data[3]=0; for (i =0;i<32;i++) { count = 0; while (IO == 0 && count++ < 15) //0.56ms delayMicroseconds(60); count = 0; while (IO == 1 && count++ < 40) //0: 0.56ms; 1: 1.69ms delayMicroseconds(60); if (count > 25) data[idx] |= (1<<cnt); if (cnt== 7) { cnt=0; idx++; }else{ cnt++; } } if ((data[0]+data[1] == 0xFF) && (data[2]+data[3]==0xFF)) { //check printf("Get the key: 0x%02x\n",data[2]); exec_cmd(data[2]); } } } bcm2835_close(); return 0; }
写好之后编译运行c文件:
gcc -Wall irm.c -o irm -lbcm2835 sudo ./irm
按下遥控按键,终端会显示接到到按键的键值
下面再说下python代码:
#!/usr/bin/python # -*- coding:utf-8 -*- import RPi.GPIO as GPIO import time PIN = 26; GPIO.setmode(GPIO.BCM) GPIO.setup(PIN,GPIO.IN,GPIO.PUD_UP) print("irm test start...") def exec_cmd(key_val): if(key_val==0x45): print("Button CH-") elif(key_val==0x46): print("Button CH") elif(key_val==0x47): print("Button CH+") elif(key_val==0x44): print("Button PREV") elif(key_val==0x40): print("Button NEXT") elif(key_val==0x43): print("Button PLAY/PAUSE") elif(key_val==0x07): print("Button VOL-") elif(key_val==0x15): print("Button VOL+") elif(key_val==0x09): print("Button EQ") elif(key_val==0x16): print("Button 0") elif(key_val==0x19): print("Button 100+") elif(key_val==0x0d): print("Button 200+") elif(key_val==0x0c): print("Button 1") elif(key_val==0x18): print("Button 2") elif(key_val==0x5e): print("Button 3") elif(key_val==0x08): print("Button 4") elif(key_val==0x1c): print("Button 5") elif(key_val==0x5a): print("Button 6") elif(key_val==0x42): print("Button 7") elif(key_val==0x52): print("Button 8") elif(key_val==0x4a): print("Button 9") try: while True: if GPIO.input(PIN) == 0: count = 0 while GPIO.input(PIN) == 0 and count < 200: count += 1 time.sleep(0.00006) count = 0 while GPIO.input(PIN) == 1 and count < 80: count += 1 time.sleep(0.00006) idx = 0 cnt = 0 data = [0,0,0,0] for i in range(0,32): count = 0 while GPIO.input(PIN) == 0 and count < 15: count += 1 time.sleep(0.00006) count = 0 while GPIO.input(PIN) == 1 and count < 40: count += 1 time.sleep(0.00006) if count > 8: data[idx] |= 1<<cnt if cnt == 7: cnt = 0 idx += 1 else: cnt += 1 if data[0]+data[1] == 0xFF and data[2]+data[3] == 0xFF: print("Get the key: 0x%02x" %data[2]) exec_cmd(data[2]) except KeyboardInterrupt: GPIO.cleanup();
按下遥控按键,终端会显示接到到按键的键值
发表评论
-
树莓派加无线网卡配置WIFI热点的方法
2018-09-25 00:04 1670配置网络 安装 dnsmasq ... -
树莓派u盘格式化后放进系统后不识别
2018-09-24 19:38 945树莓派u盘格式化后放进系统后不识别 diskgenius磁盘 ... -
一些常用的命令
2018-04-25 22:57 456#获得所有设备的功能,如带宽信息(2.4GHz,和5GHz), ... -
树莓派3B创建WiFi热点
2018-04-01 11:30 7587创建WiFi热点使用的GitHub上一个开源项目: http ... -
树莓派 - L298N模块 驱动直流电机
2018-03-18 16:45 2112单片机或树莓派一般使用 L298n 模块来驱动电机 。L298 ... -
树莓派驱动LCD12864显示屏
2018-03-11 16:49 1319适用于ST7920控制器的LCD12864显示屏,使用wiri ... -
树莓派 - MAX7219(数字倒计时) - python
2018-03-04 19:04 1223写了个倒计时 #!/usr/bin/env python ... -
树莓派 - MAX7219
2018-03-04 12:44 18131.基础:认识MAX7219 拿到MAX7219驱动的LED ... -
树莓派手动指定静态IP和DNS
2018-02-16 11:58 1319在把玩树莓派的过程中 ... -
树莓派 c获取树莓派CPU温度
2018-02-14 14:23 932C语言文件IO操作 新建一个名为cpu-temp.c文 ... -
树莓派GPIO控制--C语言篇
2018-02-14 13:58 1666一. 常用开源工程简介 树莓派内核中已经编译自带了gpio的 ... -
树莓派 远程看鱼眼摄像头
2018-02-12 21:12 1059mac电脑上最好下载vlc视频软件 有两种方式, 第一种: ... -
如何安装树莓派鱼眼摄像头模块
2018-02-12 13:58 1339安装树莓派摄像头模块 视频地址:http://www.wav ... -
树莓派使用RFID-RC522A读卡器对IC卡进行读写(通过 python)
2018-02-10 21:58 23531. 配置树莓派 首先需要运行raspi-config,开启 ... -
树莓派 1602A显示屏
2018-02-02 20:11 1294树莓派 1602A显示屏 下面代码本人测试过没有问题,开始运 ... -
树莓派 - 点亮LED
2017-12-31 14:14 819先按照下面这个图 连线:(对于LED,负极的那面内部的铁片很大 ... -
树莓派新手入门教程 - node下使用gpio
2017-12-24 12:43 1106安装 Node 为了运行 Node 脚本,树莓派必须安装 N ...
相关推荐
树莓派系列教程15主要聚焦于如何利用红外遥控技术来控制树莓派。这个教程是树莓派学习过程中的一个重要部分,因为它涉及到硬件接口的使用以及与日常生活中的电子设备交互的能力。红外遥控(IR Remote Control)是一...
树莓派系列教程15专注于讲解如何利用红外遥控技术与树莓派进行交互。在这个教程中,我们将学习如何配置树莓派的硬件和软件,以便能够接收并解析红外遥控器发出的信号。 首先,红外遥控的关键在于树莓派的device ...
在本项目中,我们主要探讨的是利用树莓派(Raspberry Pi)开发一款具备循迹、超声波避障、红外避障以及红外追踪功能的智能遥控小车。树莓派是一款基于Linux系统的微型计算机,因其强大的可扩展性和低价格,被广泛...
STM32F103C8T6开发板实验例程:红外遥控串口输出实验程序源代码。 1、单片机型号:STM32F103C8T6。 2、开发环境:KEIL。 3、编程语言:C语言。 4、提供配套PDF格式STM32F103C8T6单片机开发板电路原理图。
单片机:红外遥控六足爬虫机器人设计.doc 本文档主要介绍了单片机红外遥控六足爬虫机器人的设计,涵盖了机器人的设计、控制系统电路图、微型伺服马达原理与控制、红外遥控等方面的知识点。 一、机器人的设计 ...
实验12:红外遥控小车.zip 这个压缩包文件主要涵盖了基于STM32微控制器的红外遥控小车设计的相关内容。STM32是意法半导体(STMicroelectronics)推出的一种基于ARM Cortex-M内核的微控制器系列,广泛应用在嵌入式...
与EIB(欧洲安装总线,也称为KNX)总线系统相结合,实现红外遥控操作。EIB/KNX是一种国际标准的楼宇自动化网络,它允许不同设备间的通信,如照明、暖通空调、遮阳控制等。 首先,我们需要了解LOGO!EIB模块的功能。...
标题中的“STC15红外遥控接收”涉及的是基于STC15系列单片机的红外遥控系统设计。STC15系列是STC公司推出的一系列8位增强型单片机,以其低功耗、高性价比和丰富的内部资源而受到广泛应用。在红外遥控系统中,STC15...
在这个实验中,我们将关注的是如何利用STM32F103实现红外遥控功能,这涉及到硬件接口设计、软件编程以及红外通信协议的理解。 首先,开发环境选择的是KEIL。KEIL μVision是一款强大的嵌入式开发工具,支持多种MCU...
12. **红外遥控**:教程可能会教你如何使用树莓派接收和解析红外信号,实现对家电设备的遥控。 13. **RTC**:实时时钟(RTC)教程会解释如何添加一个外接RTC模块,以保持树莓派在断电后仍然能够准确计时。 14. **...
红外遥控系统的编码和解码过程为:红外发送端将待发送的二进制信号编码调制为一系列的脉冲串信号,通过红外发射管发射红外信号。红外接收端完成对红外信号的接收、放大、检波、整形,并解调出遥控编码脉冲。在解调...
红外遥控技术是一种使用红外线进行遥控的技术,通过在遥控器中安装红外发射器,并在智能小车中安装红外接收器,实现遥控功能。红外遥控技术广泛应用于家电、汽车、机器人等领域。 二、智能小车红外遥控系统组成 ...
红外遥控玩具小车驱动程序 红外遥控玩具小车驱动程序是一种基于红外编码和解码技术的遥控系统,用于控制玩具小车的运动。该系统由红外编码程序、红外解码程序和小车驱动程序三部分组成。在自动模式下,小车可以完成...
STM32红外遥控器程序是基于STM32微控制器实现的一种常见嵌入式应用,它涉及到红外通信技术、微控制器编程、嵌入式系统以及电路设计等多个知识点。在这个项目中,STM32作为核心处理器,负责接收和发送红外信号,实现...
"基于单片机红外遥控系统设计" 这篇设计基于单片机的红外遥控系统设计,旨在设计一个简易的智能红外遥控系统。系统包括接收和发射两大局部,发射局部有 16 个按键,接收局部含有 8 盏彩色 LED 灯、一片二位数码管和...
解码过程首先需要配置STM32的GPIO口作为红外接收传感器的输入,一般使用的是红外接收头,如TSOP系列。当红外光脉冲信号被接收头转换为电信号后,微控制器会通过中断服务程序捕获这些信号。STM32的中断系统非常强大,...
【树莓派3】是树莓派系列中的一个型号,配备了四核ARM Cortex-A53处理器,比之前的版本有显著性能提升。它内置了Wi-Fi和蓝牙功能,使其成为理想的DIY和嵌入式项目平台。在这个项目中,树莓派3作为中心处理单元,接收...
基于单片机的红外遥控电路设计说明 基于单片机的红外遥控电路设计是指使用单片机作为核心控制单元,设计了一种红外多路遥控发射/接收系统,实现对多个设备的短距离无线控制。该系统具有使用方便、功耗低、抗干扰...