评测:Tensilica L106助力ESP8266EX引爆物联网

2017-01-26 爱板网
分享到:

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

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

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

2

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通信了。
3

        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主要参数

  • 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 <ESP8266WiFi.h>          //https://github.com/esp8266/Arduino

//needed for library

#include <DNSServer.h>

#include <ESP8266WebServer.h>

#include <WiFiManager.h>         //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 <ESP8266WiFi.h>

#include <WString.h>

//the library are needed for autoconfig WiFi

#include <DNSServer.h>

#include <ESP8266WebServer.h>

#include <WiFiManager.h>

// 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本身运行稳定,没有出现死机及其它异常情况。

 

更多Tensilica及IP设计资源请关注:
Cadence官方网站:http://ip.cadence.com/

 


×
官方微信