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

目录

一、硬件平台准备 

二、软件平台准备 

三、空调解码

(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根据接收到信号给红外发射对应编码控制红外设备。

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值