树莓派+红外+语音模块练习:
1、硬件工具有如下:(1)树莓派 3B :(2)语音模块(3)红外模块(某宝购的,需要的可去某宝买)(4)WeMose板(5)本次以空调作为例子:2、需要用到的软件平台:(1)arduino开发环境(2)树莓派系统(3)串口助手调式3、红外解码过程:(1)连接红外设备(连接TTL串口):将TTL串口USB插入电脑,打开串口调试助手,设置好波特率和端口号,安装更新好USB驱动!!!(2)通过串口助手获取红外码(这里以格力空调为例)将获取的红外码,复制重新发送,检查是否为相对应的开关码,看是否功能正常:大家根据自己买来的红外设备(搭配有送设备手册),根据手册来基础功能设置,根据自己买的红外设备手册为准4、以树莓派与WeMose板通信实现:(1)以TCP通讯方式,在WeMose上实现服务端:(2)树莓派语音模块上,做一个TCP的客户端:到这里功能代码已经实现,硬件接好就可以实现功能,其他灯、电视原理基本相同,冲冲冲!!!1、硬件工具有如下:
(1)树莓派 3B :
(2)语音模块
(3)红外模块(某宝购的,需要的可去某宝买)
(4)WeMose板
(5)本次以空调作为例子:
2、需要用到的软件平台:
(1)arduino开发环境
(2)树莓派系统
(3)串口助手调式
3、红外解码过程:
(1)连接红外设备(连接TTL串口):
将TTL串口USB插入电脑,打开串口调试助手,设置好波特率和端口号,安装更新好USB驱动!!!
(2)通过串口助手获取红外码(这里以格力空调为例)
将获取的红外码,复制重新发送,检查是否为相对应的开关码,看是否功能正常:
大家根据自己买来的红外设备(搭配有送设备手册),根据手册来基础功能设置,根据自己买的红外设备手册为准
4、以树莓派与WeMose板通信实现:
(1)以TCP通讯方式,在WeMose上实现服务端:
#include<ESP8266WiFi.h>char ssid[] = "Liuzheng";//这是wifi名字char passwd[] = "68269300";//这是密码int port = 8888;//设置端口号WiFiServer server(port);//设置服务器端口// 空调开的红外码const byte open_data[] ={0xFE , 0xFD , 0x03 , 0x81 , 0x01 , 0xC9 , 0x36 , 0x43 , 0x34 , 0x43 , 0x31 , 0x45 , 0x34 , 0xAC,0x38 , 0x43 , 0x34 , 0x40 , 0x36 , 0xAC , 0x39 , 0x40 , 0x37 , 0xB1 , 0x33 , 0x43 , 0x33 , 0x41,0x38 , 0xAD , 0x36 , 0x40 , 0x39 , 0x3E , 0x33 , 0x43 , 0x36 , 0x41 , 0x36 , 0x40 , 0x34 , 0x40,0x39 , 0x40 , 0x36 , 0x41 , 0x36 , 0x40 , 0x39 , 0xAE , 0x34 , 0x3E , 0x38 , 0x41 , 0x35 , 0x3F,0x38 , 0x41 , 0x35 , 0x41 , 0x36 , 0x41 , 0x35 , 0xAF , 0x36 , 0x41 , 0x36 , 0xAE , 0x37 , 0x40,0x36 , 0x40 , 0x36 , 0xAF , 0x36 , 0x3E , 0x39 , 0x07 , 0xDC , 0x36 , 0xB1 , 0x33 , 0x43 , 0x34,0x40 , 0x36 , 0x40 , 0x34 , 0xB1 , 0x39 , 0x43 , 0x31 , 0x3E , 0x38 , 0x43 , 0x33 , 0x41 , 0x36,0x40 , 0x36 , 0x41 , 0x36 , 0x40 , 0x36 , 0x3E , 0x39 , 0xB1 , 0x34 , 0x40 , 0x36 , 0x41 , 0x36,0x40 , 0x33 , 0x43 , 0x36 , 0x3E , 0x36 , 0x43 , 0x36 , 0x41 , 0x36 , 0x40 , 0x36 , 0x41 , 0x33,0x43 , 0x36 , 0x40 , 0x34 , 0x45 , 0x31 , 0x40 , 0x39 , 0x3E , 0x39 , 0x45 , 0x31 , 0xB2 , 0x30,0xB7 , 0x31 , 0xAE , 0x36 , 0x0F , 0xB1 , 0x03 , 0x7F , 0x01 , 0xCC , 0x33 , 0x43 , 0x31 , 0x43,0x36 , 0x40 , 0x36 , 0xAF , 0x36 , 0x41 , 0x33 , 0x46 , 0x33 , 0xAF , 0x36 , 0x40 , 0x36 , 0xAF,0x33 , 0x46 , 0x34 , 0x40 , 0x36 , 0xB1 , 0x34 , 0x40 , 0x36 , 0x43 , 0x31 , 0x43 , 0x36 , 0x40,0x37 , 0x40 , 0x36 , 0x40 , 0x37 , 0x40 , 0x36 , 0x40 , 0x34 , 0x43 , 0x35, 0xB0 , 0x36 , 0x40,0x36, 0x40 , 0x36 , 0x41 , 0x36 , 0x40 , 0x34 , 0x45 , 0x34 , 0x45 , 0x32 , 0xB1 , 0x33 , 0xAF,0x35, 0xB0 , 0x33 , 0x43 , 0x36 , 0x40 , 0x34 , 0xB4 , 0x33 , 0x41 , 0x36 , 0x07 , 0xD9 , 0x39,0x42, 0x36 , 0x3C , 0x38 , 0x44 , 0x30 , 0x43 , 0x39 , 0x3C , 0x35 , 0x41, 0x38 , 0x44 , 0x33,0x3E, 0x38 , 0x41 , 0x36 , 0x40 , 0x36 , 0x41 , 0x35 , 0x41 , 0x39 , 0x3B , 0x36 , 0x40 , 0x39,0x40, 0x39 , 0x3B , 0x39 , 0x3E , 0x38 , 0x3E , 0x39 , 0x40 , 0x36 , 0x3E , 0x39 , 0x40 , 0x36,0x40, 0x36 , 0x41 , 0x36 , 0x43 , 0x33 , 0x43 , 0x34 , 0x40 , 0x36 , 0x46 , 0x31 , 0x3E , 0x38,0xAF, 0x36 , 0xAF , 0x36 , 0x40 , 0x36 , 0xAF , 0x33, 0xFF};//空调关的红外码const byte close_data[] ={0xFE , 0xFD , 0x03 , 0x87 , 0x01 , 0xC1 , 0x3E , 0x38 , 0x3F , 0x38 , 0x3E , 0x38 , 0x3F , 0x38 , 0x3E , 0x38 , 0x3F , 0x37 , 0x3F,0xA6 , 0x3F , 0x37 , 0x3F , 0xA6 , 0x3F , 0x38 , 0x3E , 0x38 , 0x3F , 0xA6 , 0x3E , 0x38 , 0x3F , 0x38 , 0x3E , 0x38 , 0x3F , 0x38,0x3E , 0x38 , 0x3F , 0x38 , 0x3E , 0x38 , 0x3F , 0x38 , 0x3E , 0x38 , 0x3F , 0xA6 , 0x3E , 0x38 , 0x3F , 0x38 , 0x3E , 0x38 , 0x3F,0x37 , 0x3F , 0x38 , 0x3E , 0x38 , 0x3F , 0xA6 , 0x3F , 0x37 , 0x3F , 0xA6 , 0x3F , 0x38 , 0x3E , 0x38 , 0x3F , 0xA6 , 0x3E , 0x38,0x3F , 0x07 , 0xD2 , 0x3F , 0xA6 , 0x3F , 0x37 , 0x3F , 0x38 , 0x3E , 0x38 , 0x3F , 0xA6 , 0x3E , 0x38 , 0x3F , 0x38 , 0x3E , 0x38,0x3F , 0x38 , 0x3E , 0x38 , 0x3F , 0x37 , 0x3F , 0x38 , 0x3E , 0x38 , 0x3F , 0xA6 , 0x3F , 0x38 , 0x3E , 0x38 , 0x3F , 0x38 , 0x3E,0x38 , 0x3F , 0x37 , 0x3F , 0x38 , 0x3E , 0x38 , 0x3F , 0x38 , 0x3E , 0x38 , 0x3F , 0x38 , 0x3E , 0x38 , 0x3F , 0x37 , 0x3F , 0x38,0x3E , 0x38 , 0x3F , 0x38 , 0x3E , 0xA7 , 0x3E , 0xA6 , 0x3F , 0x38 , 0x3E , 0x0F , 0xA9 , 0x03 , 0x88 , 0x01 , 0xC0 , 0x3F , 0x38,0x3E , 0x38 , 0x3F , 0x38 , 0x3E , 0x38 , 0x3E , 0x38 , 0x3F , 0x38 , 0x3E , 0xA6 , 0x3F , 0x38 , 0x3E , 0xA7 , 0x3E , 0x38 , 0x3F,0x38 , 0x3E , 0xA6 , 0x3F , 0x38 , 0x3E , 0x38 , 0x3F , 0x38 , 0x3E , 0x38 , 0x3F , 0x38 , 0x3E , 0x38 , 0x3F , 0x38 , 0x3E , 0x38,0x3F , 0x38 , 0x3E , 0xA6 , 0x3F , 0x38 , 0x3E , 0x38 , 0x3F , 0x38 , 0x3E , 0x38 , 0x3F , 0x38 , 0x3E , 0x38 , 0x3F , 0xA6 , 0x3F,0xA6 , 0x3E , 0xA7 , 0x3E , 0x38 , 0x3F , 0x38 , 0x3E , 0xA6 , 0x3F , 0x38 , 0x3E , 0x07 , 0xD4 , 0x3E , 0x38 , 0x3F , 0x38 , 0x3E,0x38 , 0x3F , 0x37 , 0x3F , 0x38 , 0x3F , 0x37 , 0x3F , 0x38 , 0x3E , 0x38 , 0x3F , 0x38 , 0x3E , 0x38 , 0x3F , 0x38 , 0x3E , 0x38,0x3F , 0x38 , 0x3E , 0x38 , 0x3F , 0x38 , 0x3E , 0x38 , 0x3F , 0x38 , 0x3E , 0x38 , 0x3F , 0x37 , 0x3F , 0x38 , 0x3E , 0x38 , 0x3F,0x38 , 0x3E , 0x38 , 0x3F , 0x38 , 0x3E , 0x38 , 0x3F , 0x37 , 0x3F , 0x38 , 0x3E , 0x38 , 0x3F , 0xA6 , 0x3F , 0xA6 , 0x3E , 0x38,0x3F, 0x38 , 0x3E , 0xFF};void initWiFi(){WiFi.mode(WIFI_STA);// 设置STA模式WiFi.begin(ssid, passwd); //开始连接网络while (WiFi.status() != WL_CONNECTED){Serial.print(".");delay(500);}Serial.println(WiFi.localIP() ); //打印ip地址delay(500);}void setup(){Serial.begin(115200); //设置波特率(和红外设相连接的波特率)initWiFi(); //初始化网络}void loop() {char cmd;// WiFiClient client = server.available();WiFiClient client = server.available(); //设置为服务端server.begin(); //服务初始化Serial.println(WiFi.localIP()); //打印IPwhile (client.connected())//用来等待客户端连接{while (client.available() > 0){cmd = client.read();//从客户端读取数据// Serial.println(cmd);// 打印读取的数据if (cmd == '1'){Serial.write(open_data, (sizeof(open_data) / sizeof(open_data[0]))); //给红外设备发送打开码}else if (cmd == '2'){Serial.write(close_data, (sizeof(close_data) / sizeof(close_data[0]))); //给红外设备发送关码}}}}
(2)树莓派语音模块上,做一个TCP的客户端:
#include<stdio.h>#include<string.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<stdlib.h>#include<unistd.h>#include<wiringSerial.h>#include<unistd.h>#include<string.h>#include<wiringPi.h>int main(int argc, char **argv){int s_fd;char buf[2] = {'\0'};char a='1';//与服务端指令一样char b='2';int fd;char cmd[128] = {'\0'};wiringPiSetup();//硬件初始化fd = serialOpen("/dev/ttyAMA0",9600);//语音模块串口if(argc != 3){printf("输入参数有错误\n");exit(0);}s_fd = socket(AF_INET,SOCK_STREAM,0);if(s_fd == -1){printf("创建套接字对象失败\n");exit(-1);}struct sockaddr_in addr;memset(&addr,0,sizeof(struct sockaddr_in));addr.sin_family = AF_INET;addr.sin_port = htons(atoi(argv[2]));inet_aton(argv[1],&addr.sin_addr);if( connect(s_fd,(struct sockaddr *)&addr,sizeof(struct sockaddr)) == -1){printf("连接wemose失败\n");exit(-1);}else{printf("连接成功\n");}while(1){read(fd,cmd,sizeof(cmd));//读取数据if(strstr(cmd,"open") != NULL){printf("open sucess!\n");write(s_fd,&a,sizeof(char));//发送开的红外码}if(strstr(cmd,"close") != NULL){printf("close sucess!\n");write(s_fd,&b,sizeof(char));//发送关的红外码}memset(cmd,'\0',sizeof(cmd)/sizeof(char));}return 0;}
到这里功能代码已经实现,硬件接好就可以实现功能,其他灯、电视原理基本相同,冲冲冲!!!
如果觉得《树莓派语音+红外模块实现智能家居实践》对你有帮助,请点赞、收藏,并留下你的观点哦!