参考:树莓派作为客户端与WemosD1作为服务器的无线通信(局域网通信)
作者:图触靓
发布时间: 2020-07-26 21:50:39
网址:https://blog.csdn.net/bhbhhyg/article/details/107599915
目录
- wemos版作为服务端代码:
- 树莓派作为客户端与wemos连接代码:
跑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.110delay(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版进行工作。