如何用树莓派连接语音模块,红外模块来控制红外设备详解

如何用树莓派连接语音模块,红外模块来控制红外设备详解

  • 1.硬件设备
  • 2.软件准备
  • 3.解码
    • 1.红外解码流程
      • 1.连接红外设备(与TTL串口相连)
      • 2.获取开关红外电器的码
    • 4.我们使用树莓派如何和Wemos通信呢

这里我们以红外遥控灯为例

1.硬件设备

  • 1.USB转TTL串口
    如何用树莓派连接语音模块,红外模块来控制红外设备详解_第1张图片
  • 2.语音模块
    如何用树莓派连接语音模块,红外模块来控制红外设备详解_第2张图片
  • 3.WomosD1开发板
    如何用树莓派连接语音模块,红外模块来控制红外设备详解_第3张图片
  • 4 .树莓派开发板
  • 如何用树莓派连接语音模块,红外模块来控制红外设备详解_第4张图片
  • 5 .红外模块

如何用树莓派连接语音模块,红外模块来控制红外设备详解_第5张图片
当然本例子中还有红外灯啦
如何用树莓派连接语音模块,红外模块来控制红外设备详解_第6张图片

2.软件准备

  • 1 . arduino开发环境
    如何用树莓派连接语音模块,红外模块来控制红外设备详解_第7张图片
  • 2 .树莓派系统

如何用树莓派连接语音模块,红外模块来控制红外设备详解_第8张图片

  • 3 .串口调试小助手
    如何用树莓派连接语音模块,红外模块来控制红外设备详解_第9张图片

3.解码

我们想通过红外控制得先有红外码才能够控制红外家电

1.红外解码流程

1.连接红外设备(与TTL串口相连)

如何用树莓派连接语音模块,红外模块来控制红外设备详解_第10张图片
把TTL插入到电脑USB接口,打开串口调试小助手,波特率等信息都要设置好哦,USB驱动一定记得装哦

2.获取开关红外电器的码

用遥控器对着红外工具按键,会返回相对应的码哦,一般商家都会有详细的资料可以翻阅。
如何用树莓派连接语音模块,红外模块来控制红外设备详解_第11张图片
有些红外设备还需要特定的格式,这里参考自己买的红外设备的资料为准

然后按照特定的格式发回去,一定要按照16进制发送哦,红外设备对准红外电器,看是否有反应

4.我们使用树莓派如何和Wemos通信呢

这里我们通信使用TCP通讯方式,在Wemos开启TCP的服务端


#include   //WIFI头文件
char ssid[] = "muqiao";   //自己家的WIFI账号
char passwd[] = "987654321"; //WIFI密码

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模式
  WiFi.begin(ssid, passwd);   //连接网络
  while (WiFi.status() != WL_CONNECTED) {  
         Serial.print(".");
         delay(500);
   }
   Serial.println(WiFi.localIP());  //打印IP地址
    
   delay(500);
  
}
int port = 8888;  //端口号
WiFiServer server(port); // 设置服务器端口号
void setup() 
{
  Serial.begin(9600);   //设置波特率(和红外设相连接的波特率)
  initWifiSta();
 /* while(!Serial)                  //串口未成功则循环等待
    {  
        delay(1000);                //  延迟1秒
    }
    Serial.println("串口启动成功"); //通知串口
 */
}
void loop() {
 /*
  if(Serial.available())            //是否有数据传入 (数据只会一个一个读取)
    {  
        Serial.write(Serial.read());  //串口接收后再串口发送/输出数据 
        // ESP.restart();               // 重启设备    
    }
   
 */
    WiFiClient client = server.available();   //设置为服务端
    server.begin();//服务初始化 
    Serial.println(WiFi.localIP());   //打印IP
   while (client.connected())    //等待客户端的连接
   {
         while (client.available() > 0) { 
         char cmd = client.read();  //从客户端读取数据
         Serial.println(cmd);  //打印读取的数据
         if(cmd=='1')  
         {
 //             Serial.println("recv 1");
 
            Serial.write(data_on,(sizeof(data_on) / sizeof(data_on[0]))); //给红外设备发送开灯码
            
          }
          else if(cmd=='2')
          {

//              Serial.println("close light\r\n");
              Serial.write(data_off,(sizeof(data_off) / sizeof(data_off[0])));//给红外设备发送关灯码   其实是一样的  嘻嘻嘻
          }
          
         }
   }
  
 
}

树莓派语音模块阶段我们写一个TCP的客户端

#include
#include 
#include
#include
#include
#include
int main(int argc,char **argv){
	char readbuf[2];
	char ch[128];
	if (argc!=3)
	{
		printf("input not good\n");
		exit(-1);
	}
	int fd_a;
	int s_fd=socket(AF_INET, SOCK_STREAM,0);//配置通信模式
	if (s_fd==-1)
	{
		perror("socket");
		exit(-1);
	}
	struct sockaddr_in addr;
	struct sockaddr_in addr1;
	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)//连接wemos版
	{       
		perror("connect");
		exit(-1);
	}else
	{
		printf("connect success\n");
	}
	while(1){
		printf("请输入发送的指令\n");  //发送的数据和wemos判断相结合哦
		gets(readbuf);
		puts(readbuf);
		write(s_fd,readbuf,strlen(readbuf));//向wemos版发送信息
	}
	return 0;
}


走到这里已经差不多了,通信就解决了。语音模块的话大家就可根据自己的语音模块代码进行修改。

接下载就是硬件实现了,大家动起手来吧 GOGOGO

你可能感兴趣的:(嵌入式,树莓派,Linux,socket,红外,串口通信,linux)