失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 第十一课:树莓派语音控制空调

第十一课:树莓派语音控制空调

时间:2023-07-11 13:38:31

相关推荐

第十一课:树莓派语音控制空调

目录

一、硬件平台准备

二、软件平台准备

三、空调解码

(1) 第一步:编解码模块与TTL串口连接

(2)获取空调解码值(遥控器对着编解码模块按下)

四、语音模块(采用云平台设置语音控制指令)

五、总硬件示意图

六、通信代码编写(注意:发送数据接收数据的数据类型)

(一)、服务器(wemos)

(二)、客户端(树莓派)

七、总结

一、硬件平台准备

(树莓派+Wemos+Ld3322+红外编解码模块)

二、软件平台准备

三、空调解码

(1) 第一步:编解码模块与TTL串口连接

(2)获取空调解码值(遥控器对着编解码模块按下)

​​​​​​(解码格式以购买模块手册为准)

四、语音模块(采用云平台设置语音控制指令)

平台网址:智能公元/AIOT快速产品化平台

五、总硬件示意图

六、通信代码编写(注意:发送数据接收数据的数据类型)

(一)、服务器(wemos)

#include <ESP8266WiFi.h> //WIFI头文件char ssid[] = "xiaozhao"; //“WIFI热点名称”char passwd[] = "love0821"; //WIFI密码int port = 60000;//端口号WiFiServer server(port); // 设置服务器端口号const byte data_off[] = {0xA1,0xF1,0x80,0x7F,0x01};const byte data_on[] = {0xA1,0xF1,0x80,0x7F,0x01};void initWifiSta(){WiFi.mode(WIFI_STA); // 设置STA模式(wemos=上网设备)WiFi.begin(ssid, passwd); //连接网络while (WiFi.status() != WL_CONNECTED){ Serial.print(".");delay(500);}Serial.println(WiFi.localIP()); //打印IP地址 delay(2000);}void setup() {Serial.begin(9600); //设置波特率(和红外设相连接的波特率)initWifiSta();while(!Serial)//串口未成功则循环等待{ delay(1000);}Serial.println("串口打开成功"); }void loop() {WiFiClient client = server.available(); //设置为服务端server.begin();//服务初始化 while (client.connected()) //等待客户端的连接{while (client.available() > 0) { char cmd = client.read(); //从客户端读取数据Serial.println(cmd); //打印读取的数据if(cmd=='a') {Serial.write(data_on,(sizeof(data_on) / sizeof(data_on[0]))); //开灯码 }else if(cmd=='b'){Serial.write(data_off,(sizeof(data_off) / sizeof(data_off[0])));//关灯码}}}}

(二)、客户端(树莓派)

#include <wiringPi.h>#include <stdio.h> #include <string.h> #include <strings.h> //#include <stdlib.h> //#include <sys/types.h> //#include <sys/stat.h> //#include <fcntl.h> //open()#include <unistd.h> //#include <sys/mman.h> //#include <dirent.h> //目录#include <linux/input.h> //#include <time.h> //时间#include <sys/wait.h> //#include <signal.h> //信号#include <sys/ipc.h> //#include <sys/msg.h> //#include <sys/shm.h> //#include <sys/sem.h> //#include <pthread.h> //#include <semaphore.h> //#include <sys/socket.h> //#include <arpa/inet.h> //#include <wiringSerial.h>int g_fd;//串口文件描述符int sockfd;int main(int argc,char *argv[]){/*初始化wiringPi库*/wiringPiSetup();/*打开串口*/g_fd=serialOpen("/dev/ttyAMA0",9600);if(g_fd==-1){printf("打开串口失败");}//1. 创建一个未连接TCP套接字sockfd = socket(AF_INET,SOCK_STREAM,0); //printf("sockfd = %d\n",sockfd);//2. 发起连接struct sockaddr_in srvaddr;socklen_t len = sizeof(srvaddr); //计算该结构体的长度bzero(&srvaddr,len);srvaddr.sin_family = AF_INET; //地址族srvaddr.sin_port = htons(atoi(argv[2]));//服务器的端口号inet_pton(AF_INET,argv[1],&srvaddr.sin_addr); //服务器的IP地址//sockfd -> 未连接套接字connect(sockfd,(struct sockaddr *)&srvaddr,len);//sockfd -> 已连接套接字char *p=NULL;char data;//3. 不断发送数据给服务器while(1){while(serialDataAvail(g_fd)!=-1){data=serialGetchar(g_fd);p=&data;printf("data=%02X\r\n",*p);send(sockfd,p,strlen(p),0);}}close(sockfd)return 0; //}

七、总结

工作流程:树莓派通过网络给wemos发送信号,wemos根据接收到信号给红外发射对应编码控制红外设备。

如果觉得《第十一课:树莓派语音控制空调》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。