【问题标题】:Sending data to ESP8266 Wi-Fi chip from Android device using TCP sockets使用 TCP 套接字从 Android 设备向 ESP8266 Wi-Fi 芯片发送数据
【发布时间】:2016-11-29 08:38:20
【问题描述】:

我需要在配置为接入点的 ESP8266 芯片之间发送简单整数。

我已经阅读了这个问题: Sending data to ESP8266 Wi-Fi chip from Android device

但我不明白如何使用 TCP 套接字来接收和发送数据,因为 ESP8266 只能使用 AT 命令控制。

有人可以提供深入的解释吗?

来自应用程序的代码 sn-p:

            Socket client;

            String ip = "192.111.1.1";
            int port = 80;
            int connectTimeout = 20;
            String message = "Test123";

            try{
                client = new Socket();
                client.connect(new InetSocketAddress(ip, port), connectTimeout);

                DataOutputStream DataOut = new DataOutputStream(client.getOutputStream());
                DataOut.writeBytes(message);
                DataOut.flush();

                client.close();

            } catch(UnknownHostException e) {
                e.printStackTrace();
            } catch(IOException e) {
                e.printStackTrace();
            }

【问题讨论】:

  • 您使用套接字的方式与往常一样。你需要一个服务器和一个客户端。
  • 但是我要如何使用 AT 命令来做到这一点?
  • 如果你做服务器,你可以做你想做的事。没有 AT。
  • 发布 logcat 以查看哪个异常导致您的应用崩溃。我敢打赌是NetworkOnMainThreadException
  • 你不必使用默认的 esp 固件,你可以编写一个自定义的 arduino 草图来做一些花哨的网络事情。 AT 命令更适合用作 arduino 模块。

标签: java android sockets wifi esp8266


【解决方案1】:

是否使用套接字,这取决于正在通信的设备。套接字,即Berkeley Sockets 是功能强大的计算机的抽象,它支持多个 OSI 层上的多种协议(IEEE 802 协议、IP、ICMP、TCP、UDP 等)。

从谷歌看来,ESP8266 是 Arduino 的小型扩展板。 Arduino 没有实现套接字,至少开箱即用。一般来说,较小的设备倾向于使用它们自己的 TCP/IP 实现而不是套接字,因为后者过于通用且难以实现。 Arduino 有很多支持 wifi/以太网/蓝牙的板,实际上没有人会在一个库中支持它们。

在您的情况下,微控制器通过 AT 命令与 ESP8266 通信。所以这是你唯一的选择。在微控制器上使用 AT 命令,在远程机器上使用任何可用的命令。如果是电脑,你可以在那里使用插座。如果只是同一个Arduino+ESP8266,再用AT指令。

而且可能已经为 ESP8266 实现了 TCP,它可以大大简化事情。否则,如果您的网络中只有两个设备,则第 2 层(没有 IP 和 TCP 的纯 wifi)通信也可以。

【讨论】:

  • @Nightmar 你没有在 ESP8266 上实现套接字。插座很大。套接字不是通用的解决方案。为 ESP8266 编写 AT 命令来进行 TCP 通信,或者找到一个合适的 Arduino (ATmega) 库来代替您处理它。但是,在 Andriod 上,您可以随意使用套接字。
  • @Nightmar 如果您的 android 代码有问题,请先尝试在没有 ESP8266 的情况下对其进行调试。确保它可靠地发送/接收数据后,继续使用 ESP8266 和 wifi 通信。
  • How am I supposed to test if the app reliably sends and receives data。您可以先开发一个在您的 PC 上运行的服务器应用程序。只需使用客户端服务器进行练习。你不想使用 ESP 的内置网络服务器吗?
  • @Nightmar 好吧,您的任务中有两个组件:tcp/IP(套接字)通信和无线数据传输。我建议先隔离任务。通过环回或有线网络在 PC 上测试您的网络模块。当这部分完成并测试后,用无线代替环回/有线网络。然后修复无线问题,如果有的话。我发现它比尝试一次查找和修复所有内容更简单,更不容易出错。
  • tcp/IP (socket) communications and wireless data transfer. 。不,那是一回事。是否使用wifi或电缆无关紧要。套接字将处理所有看不见的。
猜你喜欢
  • 2015-11-23
  • 1970-01-01
  • 2013-01-29
  • 1970-01-01
  • 2021-05-25
  • 2014-11-19
  • 2011-07-11
  • 1970-01-01
  • 2023-04-04
相关资源
最近更新 更多