参照:树莓派作为客户端与WemosD1作为服务器的无线通信(局域网通信)
作者:图触靓
发布时间: 2020-07-26 21:50:39
网址:https://blog.csdn.net/bhbhhyg/article/details/107599915
跑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( );
- }
- Serial.println(WiFi.localIP());
- //通过串口打印wemos的IP地址192.168.200.110
- delay( );
- }
- int port = ; //端口号
- WiFiServer server(port); // 设置服务器端口号
- void setup() {
- Serial.begin( );
- initWifiSta();
- pinMode(D2,OUTPUT);
- digitalWrite(D2,HIGH);
- }
- void loop() {
- WiFiClient client = server.available();
- server.begin(); //服务初始化
- while (client.connected()) {
- while (client.available() > ) {
- char cmd = client.read(); //从客户端读取数据
- Serial.println(cmd);
- if(cmd== )
- {
- digitalWrite(D2,LOW);
- }
- else if(cmd== )
- {
- 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[ ];
- char ch[ ];
- if (argc!= )
- {
- printf( "input not good\n");
- exit( );
- }
- int fd_a;
- int s_fd=socket(AF_INET, SOCK_STREAM, ); //配置通信模式
- if (s_fd== )
- {
- perror( "socket");
- exit( );
- }
- struct sockaddr_in addr;
- struct sockaddr_in addr1;
- memset(&addr, , sizeof(struct sockaddr_in));
- addr.sin_family=AF_INET;
- addr.sin_port=htons(atoi(argv[ ]));
- inet_aton(argv[ ],&addr.sin_addr);
- if(connect(s_fd,(struct sockaddr *)&addr, sizeof(struct sockaddr))== ) //连接wemos版
- {
- perror( "connect");
- exit( );
- }
- while( ){
- printf( "请输入发送的指令\n");
- gets(readbuf);
- puts(readbuf);
- write(s_fd,readbuf, strlen(readbuf)); //向wemos版发送信息
- }
- return ;
- }

编译完成后,输入wemos的ip地址(X输入地址),和对应的端口号(A输入端口号),即可连接上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( );
- }
- Serial.println(WiFi.localIP());
- //通过串口打印wemos的IP地址192.168.200.110
- delay( );
- }
- int port = ; //端口号
- WiFiServer server(port); // 设置服务器端口号
- void setup() {
- Serial.begin( );
- initWifiSta();
- pinMode(D2,OUTPUT);
- digitalWrite(D2,HIGH);
- }
- void loop() {
- WiFiClient client = server.available();
- server.begin(); //服务初始化
- while (client.connected()) {
- while (client.available() > ) {
- char cmd = client.read(); //从客户端读取数据
- Serial.println(cmd);
- if(cmd== )
- {
- digitalWrite(D2,LOW);
- }
- else if(cmd== )
- {
- 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[ ];
- char ch[ ];
- if (argc!= )
- {
- printf( "input not good\n");
- exit( );
- }
- int fd_a;
- int s_fd=socket(AF_INET, SOCK_STREAM, ); //配置通信模式
- if (s_fd== )
- {
- perror( "socket");
- exit( );
- }
- struct sockaddr_in addr;
- struct sockaddr_in addr1;
- memset(&addr, , sizeof(struct sockaddr_in));
- addr.sin_family=AF_INET;
- addr.sin_port=htons(atoi(argv[ ]));
- inet_aton(argv[ ],&addr.sin_addr);
- if(connect(s_fd,(struct sockaddr *)&addr, sizeof(struct sockaddr))== ) //连接wemos版
- {
- perror( "connect");
- exit( );
- }
- while( ){
- printf( "请输入发送的指令\n");
- gets(readbuf);
- puts(readbuf);
- write(s_fd,readbuf, strlen(readbuf)); //向wemos版发送信息
- }
- return ;
- }

编译完成后,输入wemos的ip地址(X输入地址),和对应的端口号(A输入端口号),即可连接上wemos版,对其单向通信。
可以通过发指令无线操控wemos版进行工作。