SerialESP8266wifi

一个简单的ESP8266 Arduino库,内置重新连接功能。

ESP8266是一个便宜的wifi模块。我得到了我的约2.50美元,包括在Aliexpress送货。 请阅读此处:https://nurdspace.nl/ESP8266

AT命令参考可以在这里找到:https://github.com/espressif/esp8266_at/wiki/AT_Description

联系我,如果你有想法改变或新功能,发现错误或只想购买jonas [AT] inspirativ [DOT] se

内存占用等等

  • 使用Arduino Nano v3 ATMega 328,Arduino IDE 1.60,固件版本为0.9.2.4的ESP8266模块进行测试
  • 大约3.5kB的程序存储
  • 大约285字节或RAM

安装

  • 从https://github.com/ekstrand/SerialESP8266wifi/archive/master.zip下载该库作为zip文件
  • 以SerialESP8266wifi解压并放置在ARDUINO_HOME / libraries /目录中
  • 重新启动Arduino IDE
  • 在编辑器中添加#include <SerialESP8266wifi.h>
  • 为了建立一个简单的服务器进行测试,我喜欢使用SocketTest http://sourceforge.net/projects/sockettest/

构造函数

SerialESP8266wifi(Stream serialIn,Stream serialOut,byte resetPin)
  • serialIn此对象用于从ESP8266读取,可以使用硬件或软件串行
  • serialOut此对象用于写入ESP8266,您可以使用硬件或软件串行
  • resetPin此引脚将被拉低然后高电平来重置ESP8266。 假定CH_PD引脚连接到该引脚。 查看引脚和更多:http://www.electrodragon.com/w/ESP8266#Module_Pin_Description
  • 例子SerialESP8266wifi wifi(swSerial, swSerial, 10);
SerialESP8266wifi(Stream serialIn, Stream serialOut, byte resetPin, Stream debugSerial)
  • serialIn此对象用于从ESP8266读取,可以使用硬件或软件串行
  • serialOut此对象用于写入ESP8266,您可以使用硬件或软件串行
  • resetPin此引脚将被拉低然后高电平来重置ESP8266。 假定CH_PD引脚连接到该引脚。 请参阅pin和更多:http://www.electrodragon.com/w/ESP8266#Module_Pin_Description
  • debugSerial启用wifi调试和本地回声串行(可能是硬件或软件)
  • 例子SerialESP8266wifi wifi(swSerial, swSerial, 10, Serial);

启动模块

boolean begin()调用这个方法将在ESP8266上做一个hw重置并设置基本参数 - 取决于模块是否正确启动,返回将返回true或false - 例子:boolean esp8266started = wifi.begin();

连接到接入点

boolean connectToAP(char * ssid, char password)*告诉ESP8266连接到接入点 - ssid要使用的ssid(工作站名称)。 请注意,此方法使用char数组作为输入。 有关如何将arduino字符串对象转换为char数组(最多15个字符),请参见 http://arduino.cc/en/Reference/StringToCharArray。 - password 假定接入点密码wpa / wpa2(最多15个字符) - return 如果在时限内(15秒)收到有效的IP,返回将返回true - 例子boolean apConnected = wifi.connectToAP("myaccesspoint", "password123"); boolean isConnectedToAP() 检查模块是否连接了有效的IP - return 如果模块具有有效的IP地址,将返回true - 例子boolean apConnected = wifi.isConnectedToAP();

连接到服务器

boolean connectToServer(char ip, char port)告诉ESP8266打开到服务器的连接 - ip 要连接的服务器的IP地址 - port 要使用的端口号 - return 如果连接在5秒内建立,则为true - 例子boolean serverConnected = wifi.connectToServer("192.168.5.123", "2121"); boolean isConnectedToServer() 检查服务器是否连接 - return 如果我们连接到服务器将返回true - 例子boolean serverConnected = wifi.isConnectedToServer(); setTransportToTCP() AND setTransportToUDP()告诉ESP8266连接到服务器时使用哪个传输。 默认是TCP。

断开与服务器的连接

disconnectFromServer() 告诉ESP8266关闭服务器连接 - 例子wifi.disconnectFromServer();

发送消息

boolean send(char channel, char * message)发送消息 - 发送别名send(char channel, char * message, true) - channel 如果要发送到服务器,请设置为SERVER。 如果我们是服务器,值可以在’1’ - ‘3’之间 - message 一个字符数组,最长25个字符。 - return 如果消息已发送,则为true - 例子boolean sendOk = wifi.send(SERVER, "Hello World!"); boolean send(char channel, char * message, boolean sendNow)发送队列消息以供稍后发送 - channel 如果要发送到服务器,请设置为SERVER。 如果我们是服务器,值可以在’1’ - ‘3’之间 - message 一个字符数组,最长25个字符。 - sendNow 如果为false,则将消息附加到缓冲区,如果为true,则会立即发送消息 - return 如果消息已发送,则为true - Example

wifi.send(SERVER, "You", false);
wifi.send(SERVER, " are ", false);
wifi.send(SERVER, "fantastic!", true); // ie wifi.send(SERVER, "fantastic!");

endSendWithNewline(bool endSendWithNewline)默认情况下,所有消息都使用换行符和回车符(println)发送,您可以禁用它 - endSendWithNewline 发送消息而不是println - Example wifi.endSendWithNewline(false);

检查客户端连接

boolean checkConnections(&connections)更新预先初始化指向Wifi连接 - return - 更新的指针是3个连接的数组: boolean connected 如果连接则为true。 char channel 频道号码,可以通过发送。 - 例子

WifiConnection *connections;

wifi.checkConnections(&connections);
for (int i = 0; i < MAX_CONNECTIONS; i++) {
  if (connections[i].connected) {
    // See if there is a message
    WifiMessage msg = wifi.getIncomingMessage();
    // Check message is there
    if (msg.hasData) {
      processCommand(msg);
    }
  }
}

检查连接

boolean isConnection(void) 如果客户端连接,则返回true,否则返回false。 如果不打扰多客户端的话,不用WifiConnection指针就可以使用上面的指针。

从连接的客户端获取传入消息

WifiMessage getIncomingMessage(void) 检查消息的串行缓冲区。返回是WifiMessage类型,如下所示。 请参阅示例检查客户端连接示例以了解用法

接收消息

WifiMessage listenForIncomingMessage(int timeoutMillis) 将听取最多timeoutMillis毫秒的新消息。 尽可能多地调用此方法,并尽可能使用尽可能大的timeoutMillis来捕获尽可能多的消息。

  • timeoutMillis 查找新传入消息的最大毫秒数
  • return WifiMessage包含
  • boolean hasData 如果收到消息,则为true
  • char channel 告诉你是否从服务器(通道=服务器)或其他来源收到消息
  • char * message该消息作为字符数组(最多25个字符)
  • 例子
void loop(){
    WifiMessage in = wifi.listenForIncomingMessage(6000);
    if (in.hasData) {
        Serial.print("Incoming message:");
        Serial.println(in.message);
        if(in.channel == SERVER)
            Serial.println("From server");
        else{
            Serial.print("From channel:");
            Serial.println(in.channel);
        }
    }
    // Do other stuff
 }

本地接入点和本地服务器

boolean startLocalAPAndServer(char ssid, char password, char* channel, char* port)将创建一个本地访问点并启动一个本地服务器 - ssid - password - channel - port - return - 例子 boolean localAPAndServerStarted = wifi.startLocalAPAndServer("my_ap", "secret_pwd", "5", "2121"); boolean stopLocalAPAndServer()禁用访问点(服务器不会停止,因为需要重启) boolean isLocalAPAndServerRunning()检查本地访问点和服务器是否正在运行

重新连接功能

每次发送(…)和listenForIncomingMessage(..)被称为监视程序检查配置的访问点,服务器和本地访问点和服务器是否仍在运行,如果不是,它们将重新启动或重新连接。如果ESP8266应该重置,也会发生同样的事情。 注意:实际上只有发送方法可以检测与服务器的连接丢失。 为了确保你已经连接起来,偶尔发送一次。

高级配置

在串行ESP8266wifi.h中,您可以更改一些内容: - HW_RESET_RETRIES 3 是begin()尝试启动ESP8266模块的最大次数 - SERVER_CONNECT_RETRIES_BEFORE_HW_RESET 30 是在执行ESP8266的硬件复位之前,看门狗将尝试与服务器建立连接的时间 - 传入和传出邮件的最大字符数可通过编辑进行更改:char msgOut[26]; char msgIn[26]; - 如果ssid和密码长度的限制不适合您,请更改: char _ssid[16];char _password[16];char _localAPSSID[16];char _localAPPassword[16]; 参考文献: https://github.com/ekstrand/ESP8266wifi