×
嵌入式 > 技术百科 > 详情

板载超低成本的ESP8266EX WiFI模块--LinkNode D1评测

发布时间:2020-06-20 发布时间:
|

前言

不久前,爱板网收到来自LINKSPRITE的BLE蓝牙开发板并进行了评测,这是一块面向物联网开发的评估板,使用的是蓝牙互联技术。1999 年,Kevin Ashton 首先提出物联网(IOT)这个名词。当时 Ashton 为 P&G,开始引入 RFID 管理 P&G 的供应链。经过十几年的发展,物联网技术已经比较成熟,基于无线通信的产品和方案全面绽放,正逐步进入大众的视线。在IOT的领域,BT、WIFI和ZIGBEE三种技术最为广泛和普及。这三种技术,各有所长,分别适用不同的领域和应用场景,成为物联网无线通信最流行的通信协议。

LinkNode D1是LINKSPRITE推出的另一款物联网开发评估板,使用的是WIFI技术,板载ESP8266EX模块,提供Arduino兼容接口,使用开源社区提供的源代码,可以在Arduino IDE中轻松访问ESP8266EX。

开箱

打开快递包装盒,看到的是一个小巧的包装盒。包装盒设计简洁,正面是LINKSPRITE的LOGO及文字标识。不干胶贴纸上列出了产品型号,编号等信息。当然最重要的是有产品配套的WIKI页面,可以迅速入门,立即体验产品的特色及功能。包装整体感觉就是:醒目、简洁、实用。

图1:包装盒,醒目、简洁、实用

打开包装盒,LinkNode D1映入眼帘。整个PCB基板使用白色油墨覆盖,丝印清晰,整体感觉比较舒服。LinkNode D1整个开发板上元器件数目较少,显得非常宽松,这主要得益于ESP8266模块的高度集成特性。Arduino兼容接口分布在开发板两侧,除此之外,还有一个DC电源接口,可外接9-24V外部DC电源。MICRO USB接口也可以供电,同时还兼有UART通信功能。

图2:开发板正面,上有USB及DC接口,Arduino兼容接口肯定是少了不了

图3:ESP8266模块,高集成度多功能模块

资源

LinkNode D1开发板上主要包含的资源如下

  • ESP-8266EX模块
  • 11 个数字接口
  • 1 个模拟接口
  • 1 个MICRO USB接口,可用于供电或通信
  • 9-24V 直流外部供电接口

ESP8266EX是乐鑫推出的一款高集成度WIFI芯片,ESP8266EX 高度集成了天线开关,射频 balun,功率放大器,低噪放大器,过滤器,电源管理模块,仅需很少的外围电路。包括前端模块在内的整个解决方案可将所占 PCB 空间降到最低。这也是LinkNode D1上元器件数目这么少的主要原因。

ESP8266EX 内置 Tensilica L106,32 位微型控制器(MCU),具有超低功耗和 16 位 RSIC。CPU 时钟速度高达 80 MHz,最高可达 160 MHz。支持实时操作系统(RTOS)。目前 Wi-Fi 协议栈只用了 20% 左右,其它的都可用于用户编程和开发。ESP8266EX 专为移动设备、可穿戴电子产品和物联网应用而设计,通过多项专有技术实现了最低功耗。ESP8266EX 有三种省电模式:激活模式、睡眠模式和深度睡眠模式。工作温度范围达到 -40°C 到 +125°C。

ESP8266目前广泛用户智能灯具、智能开关等应用场景。

上电

LinkNode D1提供Arduino兼容接口,同时,社区爱好者也将ESP8266的SDK集成到了Arduino IDE中,可以在Arduino IDE中开发ESP8266程序了,听到这个消息有木有激动3秒钟?呃,没有激动?你一定是绝顶高手,请路过!

先安装Arduino IDE,从附录给出的列表去下载并安装,一并安装好ESP8266EX的BSP支持模块,如此这般,不赘述。

接下来通个信,初步熟悉下开发板,如果你不熟悉Arduino IDE,也借此机会好好熟悉一下。

ESP8266自带一个UART通信设备,通过LinkNode D1上的CH340G引出至USB接口,这样板载的MICRO USB接口就同时具有供电及UART通信的功能了。在代码里只需要简单的配置好通信参数,就能实现与PC通信了。

图5:ESP8266外设引脚

测试用代码如下

void setup() {

  // put your setup code here, to run once:

  pinMode(BUILTIN_LED, OUTPUT);

  Serial.begin(115200);

} 

void loop() {

  // put your main code here, to run repeatedly/

  digitalWrite(BUILTIN_LED, HIGH);

  delay(500);

  digitalWrite(BUILTIN_LED, LOW);

  delay(500);

  Serial.println("Hello, LINK D1"); 

}

将上述代码编译后下载到开发板。LinkNode D1上的指示灯以1HZ的频率开始闪烁,同时终端窗口会显示来自开发板的消息。

图4:UART通信测试

WIFI

ESP8266EX本质是一个WIFI模块,使用并体验WIFI功能才是重点。

ESP8266EX模块集成了MCU模块在内部,加上一系列的外设模块,其功能框图如下

图5:ESP8266EX功能框图

ESP8266EX主要参数

  • 802.11 b/g/n
  • Integrated low power 32-bit MCU
  • Integrated 10-bit ADC
  • Integrated TCP/IP protocol stack
  • Integrated TR switch, balun, LNA, power amplifier and matching network
  • Integrated PLL, regulators, and power management units
  • Supports antenna diversity
  • WiFi 2.4 GHz, support WPA/WPA2
  • Support STA/AP/STA+AP operation modes
  • Support Smart Link Function for both Android and iOS devices
  • SDIO 2.0, (H) SPI, UART, I2C, I2S, IR Remote Control, PWM, GPIO
  • STBC, 1x1 MIMO, 2x1 MIMO
  • MPDU & A-MSDU aggregation & 0.4sguard interval
  • Deep sleep power <10uA, Power down leakage current < 5uA
  • Wake up and transmit packets in < 2ms
  • Standby power consumption of < 1.0mW (DTIM3)
  • +20 dBm output power in 802.11b mode
  • Operating temperature range -40C ~ 125C
  • FCC, CE, TELEC, WiFi Alliance, and SRRC certified

ESP8266EX模块既可以配置为工作站模式,也可以配置为AP模式,还可以配置为二者的组合。ESP8266EX工作在2.4G频段,支持WPA/WPA2加密。

AP模式

下述代码将LinkNode D1配置为AP工作模式,并且可能通过WEB配置来配置SSID及PASSWORD等。

#include          //https://github.com/esp8266/Arduino

//needed for library

#include

#include

#include          //https://github.com/tzapu/WiFiManager 

void setup() {

    // put your setup code here, to run once:

    Serial.begin(115200);

    //WiFiManager

    //Local intialization. Once its business is done, there is no need to keep it around

    WiFiManager wifiManager;

    //reset saved settings

    //wifiManager.resetSettings();

    //set custom ip for portal

    wifiManager.setAPStaticIPConfig(IPAddress(10,0,1,1), IPAddress(10,0,1,1), IPAddress(255,255,255,0));

    //fetches ssid and pass from eeprom and tries to connect

    //if it does not connect it starts an access point with the specified name

    //here  "AutoConnectAP"

    //and goes into a blocking loop awaiting configuration

    wifiManager.autoConnect("LinkNodeAP");

    //or use this for auto generated name ESP + ChipID

    //wifiManager.autoConnect();

    //if you get here you have connected to the WiFi

    Serial.println("connected... :)");

} 

void loop() {

    // put your main code here, to run repeatedly:

}

编译并下载到开发板后,可以通过手机连接并登录到AP上查看相关信息。

图6:连接到LinkNode AP

图7:WEB配置界面

图8:关于AP的基本信息

实际使用测试,LinkNode D1能够实现AP的基本功能,但功能比较简陋,离真正的AP还差很远,毕竟像OPENWRT之类的设备都有LINUX的支撑,功能丰富程度自是不可同日而语。

好在LinkNode D1的定位也并非是AP,他只不过是收集、传递信息而已。

LINKSPRITE IO

LINKSPRITE IO是一个物联网平台,借助该平台,我们可以在该平台上注册自己的网络结点,通过移动设备来控制这些结点工作。首先到LINKSPRITE IO的网站注册一个用户名,注册好并登录进去。然后创建自己的设备结果,本测试使用到LinkNode D1上的LED灯,通过远程来控制LED灯的亮、灭。

图9:注册一个设备结点

注意两个地方,一个是APIKEY,另一个是DEVICEID,这两个值随注册信息而异,SPRITELINK IO内部使用该值来区分不同的网络节点设备,通信数据包使用JSON格式封装,通过分析提取JSON数据包信息,从而来控制IO状态。下面是测试用代码,注意用自己的ID及KEY替换 

#include

#include

//the library are needed for autoconfig WiFi

#include

#include

#include

// replace with your own API key and device ID,

String apikey = "1114360a-3e2e-4063-b55e-9a40f34b0d28";

const char* deviceID = "0200000013";

const char* server = "www.linksprite.io";

WiFiClient client;

void setup() {

  Serial.begin(115200);

  pinMode(BUILTIN_LED, OUTPUT);

  WiFiManager wifiManager;

  wifiManager.setAPStaticIPConfig(IPAddress(192, 168, 99, 200), IPAddress(192, 168, 99, 1), IPAddress(255, 255, 255, 0));

  wifiManager.autoConnect("LinkNodeAP");

  Serial.print("WiFi Connected ...\n");

  Serial.println("WiFi connected");

}

void loop() {

  if (client.connect(server, 80)) {

    String  postStr = "{";

    postStr += "\"action\":\"query\",";

    postStr += "\"apikey\":\"";

    postStr += apikey;

    postStr += "\",";

    postStr += "\"deviceid\":\"";

    postStr += deviceID;

    postStr += "\",";

    postStr += "\"params\":";

    postStr += "[";

    postStr += "\"light\"";

    postStr += "]";

    postStr += "}";

    client.print("POST /api/http HTTP/1.1\n");

    client.print("Host: ");

    client.print(server);

    client.print("\nContent-Type: application/json\n");

    client.print("Content-Length: ");

    client.print(postStr.length());

    client.print("\n\n");

    client.print(postStr);

  }

  delay(1000);

  Serial.println("Store response...");

  String request = "";

  while (client.available()) {

    char c = client.read();

    request += c;

  }

  if (request != NULL)

  {

    int index1 = request.indexOf(":{");

    int index2 = request.indexOf("},");

    String param = request.substring(index1, index2 + 1);

    Serial.print("The param is ");

    Serial.println(param);

    if (param.indexOf("off") > 0) {

      digitalWrite(BUILTIN_LED, HIGH);

      Serial.println("OFF");

    } else if (param.indexOf("on") > 0) {

      digitalWrite(BUILTIN_LED, LOW);

      Serial.println("ON");

    }

    client.stop();

    Serial.println("Waiting...");

    delay(2000);

  }

}

编译并上传到开发板。为了和LINKSPRITE IO平台连接,选择自己平时上网用的WIFI路由器(注意,不是开发板本身,而是你自己上网用的WIFI路由),连接上上网用的WIFI路由后,就可以通过WEB来控制开发板上的LED灯亮或灭的效果了。下面是测试结果

图10:SPRITELINK IO平台WEB控制效果,此时开发板上的LED灯与WEB上指示状态应当一致

LINKSPRITE IO提供了一个通过JSON数据传递控制的通信机制,这也是大部分网络通信比较常用的格式。和传统的通过CGI网关来通信相比较,这样对结点的开销要求更低,不需要一个独立的WEB服务器来实现信息的收集,大部分工作由LINKSPRITE IO平台完成并处理实现了。

结论

LinkNode D1板载ESP8266EX WIFI通信模块,模块集成了必要MCU及基本的外设,使得开发板的设计非常简洁。ESP8266EX本身提供了丰富的文档,加上官方SDK及各种示例代码,一般用户都能迅速上手,集中精力于功能上的设计。开源社区将ESP8266EX的SDK移植到Arduino IDE环境中,进一步简化了这一过程,Arduino爱好者在不需要更换开发环境的情况下就能集成ESP8266强大的WIFI功能到产品中,无疑是锦上添花!

实际使用过程中发现在将二进制代码上传至开发板的过程中,偶尔会出现类似“error: espcomm_open failed”的错误,具体原因不详,需要重插拔USB接口才能解决错误。估计应该是Arduino IDE与硬件兼容性问题。测试过程中LinkNode D1本身运行稳定,没有出现死机及其它异常情况。


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
中国国产第三代核电实现并网发电