目录
一、硬件平台准备
二、软件平台准备
三、空调解码
(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根据接收到信号给红外发射对应编码控制红外设备。