1. wemos 作为设备接入wifi
#include<ESP8266WiFi.h>
char *ssid = "wifi名";
char *passwd = "wifi密码";
void initWiFiSta()
{
WiFi.mode(WIFI_STA); //设置为STA模式
WiFi.begin(ssid,passwd); //连接网络
while(WiFi.status()!=WL_CONNECTED){ //等待连接
Serial.print(".");
delay(500);
}
Serial.println(WiFi.localIP()); //成功连接,通过串口打印wemos的ip地址
}
void setup() {
Serial.begin(9600); //开启串口,波特率为9600
initWiFiSta(); //接入WIFI
}
void loop()
{
}
注意:要使用开发板上的wifi模块需要用到#include<ESP8266WiFi.h>头文件
2. 架设womos为服务器
int port = 8888; //端口号
WiFiServer server(port); //设置服务器端口号
void setup()
{
server.begin(); //启动服务器
}
void loop()
{
char cmd;
WiFiClient client = server.available(); // 服务器初始化
while(client.connected()) // 等待客户端连接
{
while(client.available()>0)//有数据到来,类似Serial.available()
{
cmd = client.read(); //读取数据
}
}
}
3. 红外设备解码
- 将红外解码模块与TTL模块相连
- 获取控制红外电器的码
将遥控器对准红外接收头,按下要解码的按键,即可通过串口调试助查看到解码的结果,结果为“用户码1+用户码2+命令码”三位。
有些红外设备还需要特定的格式,参考自己买的红外设备的资料为准,将红外模块对准红外电器,然后在串口助手中按照特定的格式发回去,看是否有反应
4.编写控制代码
- 服务器
#include<ESP8266WiFi.h>
//加湿器开/关解码结果:80 7F 02
unsingned char openOrClose[5]={0xFA,0xF1,0x80,0x7F,0x02};
char *ssid = "wifi名称";
char *passwd = "wifi密码";
int port = 8888; //端口号
WiFiServer server(port); //设置服务器端口号
void initWiFiSta()
{
WiFi.mode(WIFI_STA); //设置为STA模式
WiFi.begin(ssid,passwd); //连接网络
while(WiFi.status()!=WL_CONNECTED){ //等待连接
Serial.print(".");
delay(500);
}
Serial.println(WiFi.localIP()); //成功连接,获取wemos的ip地址
}
void setup() {
Serial.begin(9600); //打开串口,波特率为9600
initWiFiSta(); //接入WIFI
server.begin(); //启动服务器
}
void loop()
{
char cmd;
WiFiClient client = server.available(); // 服务器初始化
while(client.connected()) // 等待客户端连接
{
while(client.available()>0)//有数据到来,类似Serial.available()
{
cmd = client.read(); //读取数据
if(cmd=='1'){
Serial.write(openOrClose,sizeof(openOrClose)); //控制设备开或关
}
}
}
}
- 客户端
#include<stdio.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <unistd.h>
# include <string.h>
int main(int argc,char** argv)
{
int c_fd;
int n_write;
char writebuf[128]={'\0'};
struct sockaddr_in c_addr;
if(argc!=3){
printf("argc no 3\n");
exit(-1);
}
c_fd=socket(AF_INET ,SOCK_STREAM,0);
if(c_fd==-1){
perror("socket");
}
c_addr.sin_family=AF_INET;
c_addr.sin_port=htons(atoi(argv[2]));
s_addr.sin_addr.s_addr=inet_addr(argv[1]);
if(connect(c_fd,(struct sockaddr *)&c_addr,sizeof(struct sockaddr_in))==-1){
perror("connect");
}
while(1){
puts("input");
scanf("%s",writebuf);
n_write=write(c_fd,writebuf,strlen(writebuf));
if(n_write==-1){
puts("write failed");
exit(-1);
}
}
return 0;
}
5.测试
客户端成功与wemos 服务端进行通信,并且发送红外编码到串口控制红外电器。