极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 28444|回复: 5

Micorduino WIFI 8266 评测报告

[复制链接]
发表于 2015-7-25 20:52:49 | 显示全部楼层 |阅读模式
本帖最后由 沧海笑1122 于 2015-7-25 21:09 编辑

[前言]
   很高兴在7月初拿到MD的评测产品(ESP8266 wifi模块),这是一款性价比极高,价格亲民(虽然还不知道MD的定价,但是从TB上看,价格是很不错的)的模块,历经半个月,使用四款开发板,对多种库进行了测试,我力图从一个非专业的玩家视角,将测试情况报告如下,希望给各位ESP8266玩家有所帮助,起到抛砖引玉的作用。

一、ESP8266的背景资料http://espressif.com/zh-hans/cn/products/esp8266/
   论坛里对8266的介绍有不少文章,我也从网上转贴一下。“价格比想象的低廉、性能却比想象的高得多”
   ESP8266 是一款高度集成的芯片,该芯片专门针对无线连接的需求而开发,是一个完整且自成系统的 WiFi 网络解决方案。它能够搭载软件应用,也能通过另一个应用处理器卸载所有的 WiFi 网络功能。 ESP8266 具备强大的片上处理和存储功能,这使其可通过 GPIO 口集成传感器及其他应用的特定设备,既缩短前期开发时间,也最大限度减少运行中系统资源的占用。ESP8266 高度片内集成,仅需极少的外部电路,而其包括前端模块在内的整个解决方案,可将设计中 PCB 所占的空间降到最低。   再通俗点说,ESP8266模块有预编程的AT命令集固件,这意味着,你可以简单地将其连接到你的Arduino设备,并获得尽可能多的WiFi能力。当然现在还有不需要依靠arduino,而直接利用其资源完成wifi连接以及端口控制的方法。那不在咱们这次讨论范围内。

二、Microduino wifi esp8266模块
  Microduino wifi esp8266模块已经不是一片ESP8266芯片,而是一个MD尺寸、接口标准的完整模块,D2,D3作为串口输出。用户只需要关注AT指令、应用即可,不需要搭建外围电路。  上靓图两张。



三、评测情况
1、基于simple库,在UNO、mega2560上的评测
    对一片新模块,我还是一如既往“走捷径”,从github上寻找库,有了库就有了例程,边学边理解。可以较快掌握。
首先还是从经典的UNO开发板入手,选择了一款轻量级的库,https://github.com/sleemanj/ESP8266_Simple
基于0.9.2.4固件,恰好就是我拿到的这款评测板的固件版本。

硬件接线非常简单:这款轻量级库,是利用软串口(D8,D9)与UNO通信,wifi模块默认9600波特率。

//连接ESP8266设备
//  Arduino的D8(RX)(---ESP TX)
//  Arduino的D9(TX)(---ESP RX)
//  MD的ESP8266使用的是3.3V供电,不可超过3.8V。
我用IDE 1.0.5测试了这款库的HelloWorld.ino
填写你自己的SSID和PSW就可以了,结果如下:


正确连接并且获得了IP地址。

虽说是轻量级的库,功能并不简陋,还有一个HTTP_SERVER例程。建立了一个ip地址为192.168.0.75的 HTTP Server.你可以通过浏览器访问。这个例程有两个功能,其中一个就是利用http方式,直接控制UNO上的led13,已经很不错了,记得2012年用W5100做类似功能时,还是比较麻烦的。
不过以UNO的小身板,测试HTTP功能有些勉强,于是用mega2560跑了一遍,效果就可以了。在手机上的浏览器里,点击192.168.0.75/led,就看到板载LED13的变化,是不是很方便?

2、基于itead库,在Microduino Core+(644p)上,将温度传感器数据上送yeelinkitead库,https://github.com/itead/ITEADLIB_Arduino_WeeESP8266
有比较完整的API列表,你可以将其整理成一个PDF手册,便于查阅和使用。
在做此项测试的时候,参考了很多网上的例程,出处无法一一指出,在此一并致谢,也请教了yeelink群友。现在这个例程,是基于LM35(模拟温度传感器),我还做了一版DS18B20的传感器,用了DS18B20库,但是一直有间断性数据溢出,没有时间做深入调试,所以就把LM35的代码上传,供大家参考。我在MD的官方IDE 1.6.5版本下调试正常,数据上送正常。因为在程序中做了注释,在此就不一一赘述。这是yeelink的网站数据曲线图。


这是叠装后的硬件连接,很简单,LM35不要接反了,面对标识,从左起,VCC,输入,GND。
需要说明的时,我在使用CORE+和CORE时,发现同样声明模拟口4,在core和uno上,都是直接连接A4即可,但是在CORE+上,却需要连接A3,我看了数据表,CORE+的A4,A5是在侧面,需要用排针自己引,那么为什么A3就等同于A4?我只看到“(ADC4)PA4----A3”,是不是就这个意思,回头还要请教大家。

代码如下:
  1. /*项目名称:LM35温度传感器+ESP8266+MD core+ 上送yeelink连接试验
  2. 试验时间:2015-07-25
  3. 元器件:LM-35 DZ模拟传感器一只,正对标示,从左往右,+5V,模拟输出,GND
  4. 开发板:Micrduino Core+ 644P
  5. WIFI:Micrduino ESP8266
  6. 连接方法:(1)叠装CORE+,ESP8266;
  7.          (2)LM35接好+5V,GND,将LM35的模拟输出接CORE+的A3(注意,定义为4)
  8. 库与代码原型:来自itead,[url]https://github.com/itead/ITEADLIB_Arduino_WeeESP8266[/url],以及在极客工坊、arduino.cn上的教程。
  9. */



  10. #define SSID       "your ssid"                //type your own SSID name
  11. #define PASSWORD   "your psw"                                //type your own WIFI password
  12. int potPin = 4;                     //设置模拟口4为LM35的信号输入端口,在CORE+上要插在A3口上。
  13. float temperature = 0;                //设置temperature为浮点变量
  14. long val=0;                       //设置val为长整数变量
  15. #include "ESP8266.h"
  16. ESP8266 wifi(Serial1); //定义硬串口1,core+与esp8266可以直接叠装

  17. // for yeelink api
  18. #define APIKEY         "**************************" // replace your yeelink api key here
  19.   //replace the device ID and sensor ID for temperature sensor.
  20. #define DEVICEID0       ** // replace your device ID
  21. #define SENSORID0       ** // replace your sensor ID

  22. char server[] = "api.yeelink.net";   // name address for yeelink API
  23. unsigned long lastConnectionTime = 0;          // last time you connected to the server, in milliseconds
  24. boolean lastConnected = false;                 // state of the connection last time through the main loop
  25. const unsigned long postingInterval = 5*2000; // delay between 2 datapoints, 5s
  26. String returnValue = "";
  27. boolean ResponseBegin = false;
  28. //int temperature;
  29.   
  30. void setup()
  31. {
  32.   Serial.begin(9600);
  33.   Serial.println("SetUp...");
  34.   bool b = wifi.joinAP(SSID,PASSWORD);
  35.   if(!b)
  36.   {
  37.     Serial.println("Init error");
  38.   }
  39.   delay(8000);  //make sure the module can have enough time to get an IP address
  40.    Serial.println(wifi.getLocalIP().c_str());
  41. }
  42. void loop()
  43. {
  44.    val=analogRead(potPin);//温度传感器LM35接到模拟PIN4上;val变量为从LM35信号口读取到的数值
  45.   uint8_t buffer[128] = {0};
  46. // ds.start();//开始测量(温度传感器)
  47.   delay(200);
  48. // char message[400];
  49.    // if you're not connected, and ten seconds have passed since
  50.   // your last connection, then connect again and send data:
  51.   if((millis() - lastConnectionTime > postingInterval)) {
  52.       temperature = (val*0.0048828125*100);//温度转换,详见极客工坊教程
  53.       sendData(DEVICEID0,SENSORID0,temperature);
  54.         //  测试时使用     Serial.print("millis()- lastConnectionTime  ");
  55.         / //       Serial.println(millis() - lastConnectionTime);
  56.         //        Serial.print("postingInterval:");
  57.         //        Serial.println(postingInterval);
  58.          //       Serial.println((millis() - lastConnectionTime > postingInterval));
  59.   }
  60.   
  61.   // if there's incoming data from the net connection.
  62.   // send it out the serial port.  This is for debugging
  63.   // purposes only:
  64. uint32_t len = wifi.recv(buffer, sizeof(buffer), 10000);
  65.     if (len > 0) {
  66.         Serial.print("Received:[");
  67.         for(uint32_t i = 0; i < len; i++) {
  68.             Serial.print((char)buffer[i]);
  69.         }
  70.         Serial.print("]\r\n");
  71.     }
  72.     delay(10);
  73.   }
  74.   
  75. // this method makes a HTTP connection to the server:
  76. void sendData(unsigned int device_id,unsigned int sensor_id,float thisData) {
  77.   // if there's a successful connection:
  78.   if (wifi.createTCP (server, 80)) {
  79.     Serial.println("connecting...");
  80.      String cmd;
  81.         cmd = "POST /v1.0/device/";
  82.         cmd += String(device_id);
  83.         cmd += "/sensor/";
  84.         cmd += String(sensor_id);
  85.         cmd += "/datapoints";
  86.         cmd += " HTTP/1.1\r\n";//上传数据到yeelink
  87.         cmd += "Host: api.yeelink.net\r\n";
  88.         cmd += "Accept: *";
  89.         cmd += "/";
  90.         cmd += "*\r\n";
  91.         cmd += "U-ApiKey: ";
  92.         cmd += APIKEY;
  93.         cmd += "\r\n";
  94.         cmd += "Content-Length: ";
  95.         int thisLength = 13 + getLength(thisData);
  96.         cmd += String(thisLength);
  97.         cmd += "\r\n";
  98.         cmd += "Content-Type: application/x-www-form-urlencoded\r\n";
  99.         cmd += "Connection: close\r\n";
  100.         cmd += "\r\n";
  101.         cmd += "{"value":";
  102.         char www[80];
  103.          dtostrf(thisData,2,2,www);//把温度值转换为两位整数,两位小数的字符串
  104.          cmd+= www;
  105.          cmd += "}\r\n\r\n";
  106.          Serial.println(cmd);
  107.     const char *senddata = cmd.c_str();
  108.     wifi.send((const uint8_t*)senddata,strlen(senddata));
  109.     // note the time that the connection was made:
  110.      lastConnectionTime = millis();
  111.   }
  112.   else {
  113.     // if you couldn't make a connection:
  114.     Serial.println("connection failed");
  115.     Serial.println("disconnecting.");
  116.     wifi.releaseTCP();
  117.   }
  118. }
  119.   
  120. int getLength(int someValue) {
  121.   // there's at least one byte:
  122.   int digits = 1;
  123.   // continually divide the value by ten,
  124.   // adding one to the digit count for each
  125.   // time you divide, until you're at 0:
  126.   int dividend = someValue /10;
  127.   while (dividend > 0) {
  128.     dividend = dividend /10;
  129.     digits++;
  130.   }
  131.   // return the number of digits:
  132.   return digits;
  133. }
  134.   
  135.   
  136.   
  137.   
复制代码


4、在蓝色启航(644P,arduino兼容板)上的测试
这是一款我从TB购买的兼容板,有两个版本,一个叫蓝色启航(644P),一个叫DIY的梦想(1284P),性价比都很好,也很小巧,当然,比MD的板子还是要大得多啦。

在644P上进行了测试,测试了itead的库,因为这块板子也是多个硬串口引出(如串口1是D10,D11),所以调试起来也很方便。没有特别的地方。只是这块板子没有3.3V引出,只有5V,所以如果DIY过程中,还需要解决这个问题,做个降压回路。


【评测结语】
1、这块板子是MD的通用尺寸,直接叠装,一如既往地精致,做工精巧。使用core+的硬串口1,并不需要其他连线,直接接传感器就可以了,由于有天线,所以比CORE+打了三毫米左右,并不影响美观和使用。
2、关于wifi连接,刚开始存在WIFI连接无响应等现象,需要复位。我想有固件的原因也有面包板杜邦线连接的原因,毕竟是无线产品,有条件还是焊接可靠。  在连续运行,尤其是7月24,25日,室温偏高的情况下,存在连接中断现象,MD的core+就要好很多,兼容的2560就差一些,DS18B20的传感器也工作不太正常,这样的小器件,有条件应该多备几只,互相做个比对。
3、关于信号,我的路由器在客厅,我在卧室安放了一套装置,一道墙,距离8米左右,工作基本正常(48小时)。
4、发热情况:这是一款低功耗wifi模块,我用2560跑了48小时,不太烫,感觉30~40度左右,屏蔽罩也有散热作用吧,能耗我没有测试。
【以下来自http://www.seeedstudio.com/document/pdf/ESP8266%20Specifications(Chinese).pdf】
   ESP8266 专为移动设备、可穿戴电子产品和物联网应用设计,并与其他几项专利技术一起使机器实现最低能耗。这种节能的构造以三种模式运行:激活模式、睡眠模式和深度模睡眠式。
    ESP8266 使用高端电源管理技术和逻辑系统调低非必需功能的功率,调控睡眠模式与工作模式之间的转换,在睡眠模式下,其消耗的电流小于 12uA,处于连接状态时,其消耗的功率少于 1.0mW(DTIM=3)或 0.5mW(DTIM=10)。
    睡眠模式下,只有校准的实时时钟和 watchdog 处于工作状态。可以通过编程使实时时钟在特定的时间内唤醒 ESP8266。
    通过编程,ESP8266 会在检测到某种特定情况发生的时候自动唤醒。
5、关于库,MD这款esp8266模块实际上还是将其作为扩展板,玩家直接面向应用,有能力的玩家熟悉其AT指令集,像我这样的水平,可以关注一些库,学习其API接口指令,也可以很好地入门,作出一些好玩的东西。
6、下一步的应用设想,一是可以做物联网应用,上送数据,接受控制指令等。
二是因为其低功耗,所以我想试试做穿戴的小玩意,比如一个wifi点阵项链,通过手机wifi连接后,可以远程控制另外一个项链,比如按动一个按钮,对方的“心”开始闪动。。。
潘兄说,出货时固件会升到最新,且有一键连接的“智能连接”。期待。
非常感谢潘兄提供测试的机会,感谢itead的库和教程,感谢yeelink、极客工坊和arduino.cn
对评测中使用的代码、库,都来自于论坛和网络,能标明出处的我尽量标明,如有遗漏,并非有意,敬请谅解


最后,附上代码和库。





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2015-7-26 00:50:47 | 显示全部楼层
很想知道MD对这个模块的定价
回复 支持 反对

使用道具 举报

发表于 2015-7-26 02:53:40 | 显示全部楼层
不会用,帮顶
回复 支持 反对

使用道具 举报

发表于 2015-7-26 21:41:20 | 显示全部楼层
写得好棒!microduino系列产品做了实验,有用其他淘宝上core也做了测试,很用心。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-27 15:50:00 | 显示全部楼层
topdog 发表于 2015-7-26 21:41
写得好棒!microduino系列产品做了实验,有用其他淘宝上core也做了测试,很用心。

@topdog兄,我也拜读了您的《Microduino Wi-Fi CC3000模块固件升级的过程》帖子,我是业余玩家,尝试从玩家的视角看。现在core+已经跑了36小时了,中断了三次,都能够自动连接回复。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-27 15:50:41 | 显示全部楼层
本帖最后由 沧海笑1122 于 2015-7-27 15:54 编辑
topdog 发表于 2015-7-26 21:41
写得好棒!microduino系列产品做了实验,有用其他淘宝上core也做了测试,很用心。


@topdog兄,我也拜读了您的《Microduino Wi-Fi CC3000模块固件升级的过程》帖子,我是业余玩家,尝试从玩家的视角看。现在core+已经跑了36小时了,中断了三次,都能够自动连接恢复。大约中断半小时每次。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-25 00:30 , Processed in 0.046871 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表