我希望澄清this example ESP8266 sketch中的WiFiClient和WiFiServer对象如何启动TCP连接,并允许Android应用程序读取和写入草图中设置的缓冲区。
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
WiFiServer server(port);
WiFiClient client;
uint8_t buf1[1024];
server.begin(); // start TCP server
client = server.available(); // wait for it to connect
buf1[i1] = (uint8_t)client.read(); // read char from client (RoboRemo app)
client.write((char*)buf2, i2);
此草图与闭源Android应用程序调用Roboremo进行对话。它使用 WiFiServer 创建TCP服务器,使用 WiFiClient 来读/写缓冲区。什么是这个TCP服务器,以及用于读/写ESP8266的机制是什么?所以,如果我正在与应用程序开发人员进行对话,我该如何告诉他们如何写入此TCP服务器(IP和端口号除外)?这是一个“TCP套接字”,这是否会转化为移动应用程序用户会知道如何继续进行的操作?
提出这个问题的另一种方式:我希望能够在没有Android应用程序的情况下测试对ESP8266的读/写。因此,如果我在与ESP8266相同的网络上安装了Raspberry Pi,我可以使用什么实用程序(机制)来从Pi读取/写入这些缓冲区?
答案 0 :(得分:0)
检查Roboremo草图显示您将通过提供ssid并传入草图来在STA模式下使用esp8266。这意味着您需要在建立连接之前找到esp8266的IP地址。草图中的一个荒谬的评论是:
然后以某种方式找到ESP从路由器获得的IP
因此,如果您将继续使用STA模式,您可以转到路由器设置并从DHCP客户端找到ESP8266。
对于raspberry TCP客户端连接,Linux套接字客户端不需要任何其他内容。这是一个在raspberry上测试的基本python客户端:
import socket
import sys
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error, msg:
print 'Failed to create socket. Error code: ' + str(msg[0]) + ' , Error message : ' + msg[1]
sys.exit();
print 'Socket Created'
host = 'YOUR_ESP8266_IP '
port = 9876
s.connect((remote_ip , port))
print 'Socket Connected to ' + host
#Send some data to remote server
message = "test esp8266 server"
try :
s.sendall(message)
except socket.error:
print 'Send failed'
sys.exit()
print 'Message send successfully'