树莓派作为客户端与WemosD1作为服务器的无线通信(局域网通信)

跑Linux的树莓派可以通过路由器来与wemos版进行局域网内通信:

核心思想是linux下的socket网络编程,树莓派作为客户端,wemos作为服务器。

 

wemos版作为服务端代码:

#include <ESP8266WiFi.h>
char ssid[] = "路由器名称";   
char passwd[] = "密码";

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地址192.168.200.110
   delay(500);
  
}
int port = 8888;  //端口号
WiFiServer server(port); // 设置服务器端口号
void setup() {
  Serial.begin(115200);
  initWifiSta();
  pinMode(D2,OUTPUT);
  digitalWrite(D2,HIGH);
  
}
void loop() {
    WiFiClient client = server.available(); 
    server.begin();//服务初始化 
   while (client.connected()) {
         while (client.available() > 0) { 
         char cmd = client.read();  //从客户端读取数据
         Serial.println(cmd);
         if(cmd==49)
         {
          digitalWrite(D2,LOW);
          }
          else if(cmd==50)
          {
            digitalWrite(D2,HIGH);
          }
          
         }
   }
    

}

树莓派作为客户端与wemos连接代码:

#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);
        }
        while(1){
        printf("请输入发送的指令\n");
        gets(readbuf);
        puts(readbuf);
        write(s_fd,readbuf,strlen(readbuf));//向wemos版发送信息
        }
        return 0;
}

编译完成后,输入wemos的ip地址(X输入地址),和对应的端口号(A输入端口号),即可连接上wemos版,对其单向通信。

可以通过发指令无线操控wemos版进行工作。

猜你喜欢

转载自blog.csdn.net/bhbhhyg/article/details/107599915