树莓派(TCP客户端 )和Wemos(TCP服务端&连接红外模块)通讯实现对红外设备的控制

Posted 行稳方能走远

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树莓派(TCP客户端 )和Wemos(TCP服务端&连接红外模块)通讯实现对红外设备的控制相关的知识,希望对你有一定的参考价值。

摘自:U如何用树莓派连接语音模块,红外模块来控制红外设备详解
作者:一只青木呀
发布时间:2020-08-12 17:14:10
网址:https://blog.csdn.net/weixin_45309916/article/details/107960066

硬件

1.USB转TTL串口

2.WomosD1开发板

3.树莓派开发板

4.红外模块

5.红外设备(如:红外灯)

软件

1 . arduino开发环境

2 .树莓派系统

3 .串口调试小助手

红外解码

思路:利用红外码控制红外家电

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

把TTL插入到电脑USB接口,打开串口调试小助手,波特率等信息都要设置好,USB驱动装好。

在这里插入图片描述

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

用遥控器对着红外工具按键,会返回相对应的码,一般商家都会有详细的资料可以翻阅。

有些红外设备还需要特定的格式,这里参考自己买的红外设备的资料为准。

然后按照特定的格式发回去,一定要按照16进制发送,红外设备对准红外电器,看是否有反应。
在这里插入图片描述

树莓派和Wemos通信

这里我们通信使用TCP通讯方式,在Wemos开启TCP的服务端树莓派写一个TCP的客户端

Wemos TCP服务端


#include <ESP8266WiFi.h>  //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<netinet/in.h>
#include <arpa/inet.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
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;
}

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

以上是关于树莓派(TCP客户端 )和Wemos(TCP服务端&连接红外模块)通讯实现对红外设备的控制的主要内容,如果未能解决你的问题,请参考以下文章

树莓派接入巴法云

树莓派TCP通信

在树莓派上使用Python实现Modbus TCP Server

树莓派与安卓手机app的WIFI通信(局域网通信)

树莓派安装frp服务

树莓派使用iperf3测量网络带宽