极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 22865|回复: 4

用Arduino平台 编译ESP8266(单芯片,不需要at指令)

[复制链接]
发表于 2015-5-26 09:30:36 | 显示全部楼层 |阅读模式
本帖最后由 wxws 于 2015-5-26 09:32 编辑

ESP8266  ARDUINO  支持包

开了个群,专门讨论这个: 104345601

ESP8266简介,乐鑫的单芯片wifi 控制器
目前市面上有3种开发方式:
1:使用乐鑫AT 固件,使用时,单片机通过串口用AT指令来实现wifi连接、网络通迅
2:使用乐鑫SDK开发包,直接用C编程
3:使用NODEMCU固件,这是国内大能 在SDK基础上,加入了LUA语言


现在,出现了第4种开发方式,arduino直接编程,原理还是在SDK基础上开发,不过已经封装为我们熟的ARDUINO语言了。
注意已经不需要ARDUINO硬件了,只是利用arduino软件来编译8266的源码。

硬件效果=  原arduino +w5500=单颗esp8266

出处:
https://github.com/sandeepmistry/esp8266-Arduino
(基于https://github.com/esp8266/Arduino  ,不过上面这个安装方便,另这个不会编译,有会的指点下)

百度网盘链接:http://pan.baidu.com/s/1eQxq53s 密码:64wd
内有arduino1.64 与支持包

Arduino IDE 1.6.0 or later

Installing

Create a folder named hardware in your Sketchbook folder, usually:
Linux: ~/Sketchbook
OS X: ~/Documents/Arduino
Windows: ~/My Document/Arduino
Download a release
Extract release
Place esp8266com folder in hardware folder created in step 1.
Start or restart the Arduino IDE

安装:
1:先运行一次arduino软件后关闭。
2:windows:  在~/My Document/Arduino 下,建一文件夹“hardware"
3:装压缩包中的esp8266com文件夹,放入上述目录
4:启动arduino,工具菜单中选择NODEMCU即可,下载时支持自动reset.

NodeMCU与esp8266关系:


就是个普通8266模块+WCH340 USB串口,并支持自动复位,就象以前的arduino一样。
本来由国内大能将LUA语言,内置在了8266中,开发也较以前AT方便,也能单芯片,可
惜的是,8266内存不够,跑了LUA,错误百出。


当然,本支持包也直接支持8266模块,接线图:




回复

使用道具 举报

 楼主| 发表于 2015-5-26 09:36:09 | 显示全部楼层
本帖最后由 wxws 于 2015-5-26 09:38 编辑

例子:

用ARDINO给ESP8266编程
单芯片实现 fuhomenet 客户端(支持透网,WEB,APK)

请与这个作一下比较,
arduino+w5500实现的有线网络客户端
http://www.fuhome.net/bbs/forum.php?mod=viewthread&tid=2040&extra=page%3D2
  1. /*
  2.   8266fuhome.ino:
  3.   by:wxws  qq:1103012
  4. 群:Arduino_ESP8266开发 104345601

  5. 协议:
  6. http://www.fuhome.net/api/must/

  7. 服务器IP:115.28.93.201
  8.          udp端口:7001

  9. 30s
  10. 心跳发送: f=1  设备id  密码
  11. 心跳:f=1&d=设备id&m=密码&from=sb->server
  12. 心跳收到返回:f=1&d=设备id&from=server->sb1

  13. 远程收到命令:f=a&d=设备id&n=jyzhkj&com=open&from=server->sb
  14. 命令返回:f=b  设备id  密码 用户名  响应消息(可自定义)
  15. 返回:f=b&d=设备id&m=密码&n=jyzhkj&com=open&from=sb->server

  16. */


  17. #include <ESP8266WiFi.h>
  18. #include <WiFiUdp.h>


  19. #define DHCP 0

  20. WiFiUDP Udp;



  21. char ssid[] = "jyzhkj0";  //  your network SSID (name)
  22. char pass[] = "868996310";       // your network password


  23. unsigned int localPort = 7001;      // 本地端口

  24. IPAddress rip(115, 28, 93, 201); //fuhome的服务器ip
  25. unsigned int rPort = 7001;      // 服务器端口

  26. String deviceid = "00000000"; //改成你的设备ID,需先在fuhome.net上注册,并增加一个新设备,详见网站
  27. String deviceps = "0123456789"; //设备密码

  28. String Heart = "";
  29. String HeartTemp = "f=1&d=%s1&m=%s2&z=%s3&from=sb->server"; //心跳包模板
  30. String ReplyTemp = "f=b&d=%s1&m=%s2&n=%s3&com=%s4&from=sb->server";      //命令包模板
  31. String SendValue = "f=d&d=%s1&m=%s2&num=123&c=1&a=%s3&from=sb->server";  //设备附加传感器数据

  32. String udpget = "";
  33. String usename = "";
  34. String command = "";
  35. char ttc[200];

  36. #define LED 16      //板载LED灯  GPIO16口
  37. int ledstate = 1;
  38. unsigned int RemoteCount = 0;

  39. void setup()
  40. {
  41.     Serial.begin(115200);
  42.     // start the Ethernet and UDP:
  43.     pinMode(LED, OUTPUT);
  44.     digitalWrite(LED, 0);

  45.     WiFi.begin(ssid, pass);

  46.     while (WiFi.status() != WL_CONNECTED)
  47.     {
  48.         delay(500);
  49.         Serial.print(".");
  50.     }
  51.     Serial.println("");

  52.     Serial.println("WiFi connected");
  53.     Serial.println("IP address: ");
  54.     Serial.println(WiFi.localIP());
  55.     Udp.begin(localPort);


  56.     ReplyTemp.replace("%s1", deviceid);
  57.     ReplyTemp.replace("%s2", deviceps);

  58.     SendValue.replace("%s1", deviceid);
  59.     SendValue.replace("%s2", deviceps);

  60. }

  61. void loop()
  62. {
  63.     // if there's data available, read a packet
  64.     int packetSize = Udp.parsePacket();
  65.     if (packetSize)
  66.     {

  67.         udpget = "";
  68.         for (int i = 0; i < packetSize; i++)
  69.         {
  70.             udpget += (char)Udp.read();
  71.         }


  72.         Serial.print(getuptime());
  73.         Serial.print(" R:");
  74.         Serial.println(udpget);


  75.         if (udpget.indexOf("f=a") >= 0)//心跳包不响应
  76.         {

  77.             usename = Findany("&n=");
  78.             command = Findany("&com=");


  79.             if (command == "open")
  80.             {
  81.                 ledstate = 1;
  82.                 command = "完成" + command;

  83.             }
  84.             if (command == "close")
  85.             {
  86.                 ledstate = 0;
  87.                 command = "完成" + command;
  88.             }
  89.             if (command == "flash")
  90.             {
  91.                 ledstate = 2;
  92.                 command = "完成" + command;
  93.             }

  94.             udpget = ReplyTemp;
  95.             udpget.replace("%s3", usename);
  96.             udpget.replace("%s4", command);
  97.             udpget.toCharArray(ttc, 100);


  98.             Serial.print("   Send reply:");
  99.             Serial.println(udpget);

  100.             //Udp.beginPacket( rip,rPort );
  101.             Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
  102.             Udp.write(ttc);   //状态响应回复包  f=b&d=设备ID&m=设备密码&n=jyzhkj&com=命令&from=sb->server
  103.             Udp.endPacket();

  104.             RemoteCount++;
  105.         }
  106.         else
  107.         {
  108.             // if (udpget.indexOf("f=1") >= 0)  //心跳包
  109.             //     Serial.println("Recive f=1.");
  110.             // if (udpget.indexOf("f=b") >= 0)  //回复包
  111.             //     Serial.println("Recive f=b.");

  112.         }
  113.     }

  114.     LedControl();
  115.     UdpHeart();//心跳
  116.     UpValue();//传感器上传
  117. }

  118. //灯状态切换
  119. void LedControl()
  120. {
  121.     static long previousMillis = 0;
  122.     static int currstate = 0;

  123.     switch (ledstate)
  124.     {
  125.     case 0:
  126.         currstate = 1;
  127.         break;
  128.     case 1:
  129.         currstate = 0;  //点亮
  130.         break;
  131.     case 2:
  132.         if (millis() - previousMillis > 200)  //200ms
  133.         {
  134.             previousMillis = millis();
  135.             currstate = 1 - currstate;
  136.         }
  137.         break;
  138.     }

  139.     digitalWrite(LED, currstate);

  140. }

  141. //查找参数,下一个“&”为界
  142. String Findany(String findstr)
  143. {
  144.     String ttv = "";
  145.     int t1, t2;
  146.     t1 = udpget.indexOf(findstr);
  147.     if (t1 >= 0)
  148.     {
  149.         t2 = udpget.indexOf("&", t1 + 1);
  150.         ttv = udpget.substring(t1 + findstr.length(), t2);
  151.     }

  152.     return ttv;
  153. }

  154. //上传 传感器值
  155. void UpValue()
  156. {
  157.     static unsigned  int previouscount = 999;

  158.     if (previouscount != RemoteCount)
  159.     {

  160.         previouscount = RemoteCount;
  161.         Heart = SendValue;
  162.         Heart.replace("%s1", deviceid);  //d
  163.         Heart.replace("%s2", deviceps);  //m
  164.         Heart.replace("%s3", String(RemoteCount));  //传感器值

  165.         Serial.print(getuptime());
  166.         Serial.print(" V:");
  167.         Serial.println(Heart);

  168.         Heart.toCharArray(ttc, 200);
  169.         Udp.beginPacket(rip, rPort);
  170.         Udp.write(ttc);   //心跳包   f=1&d=设备ID&m=设备密码&from=sb->server

  171.         Udp.endPacket();


  172.     }
  173. }



  174. //UDP心跳包
  175. void UdpHeart()
  176. {
  177.     static long previousMillis = -4000;

  178.     if (millis() - previousMillis > 30000)  //30秒
  179.     {

  180.         previousMillis = millis();
  181.         Heart = HeartTemp;
  182.         Heart.replace("%s1", deviceid);  //d
  183.         Heart.replace("%s2", deviceps);  //m
  184.         Heart.replace("%s3", getuptime());  //z  状态

  185.         Serial.print("ESP.getFreeHeap():");
  186.         Serial.println(ESP.getFreeHeap());
  187.         Serial.print(getuptime());
  188.         Serial.print(" S:");
  189.         Serial.println(Heart);

  190.         Heart.toCharArray(ttc, 200);
  191.         Udp.beginPacket(rip, rPort);
  192.         Udp.write(ttc);   //心跳包   f=1&d=设备ID&m=设备密码&from=sb->server

  193.         Udp.endPacket();


  194.     }
  195. }


  196. String  getuptime() //从millis转换成 天数:小时:分:秒
  197. {

  198.     String tts = "";
  199.     long days = 0;
  200.     long hours = 0;
  201.     long mins = 0;
  202.     long secs = 0;
  203.     char ccc[20];
  204.     secs = millis() / 1000; //convect milliseconds to seconds
  205.     mins = secs / 60; //convert seconds to minutes
  206.     hours = mins / 60; //convert minutes to hours
  207.     days = hours / 24; //convert hours to days
  208.     secs = secs - (mins * 60); //subtract the coverted seconds to minutes in order to display 59 secs max
  209.     mins = mins - (hours * 60); //subtract the coverted minutes to hours in order to display 59 minutes max
  210.     hours = hours - (days * 24); //subtract the coverted hours to days in order to display 23 hours max

  211.     sprintf(ccc, "%02d:%02d:%02d:%02d", int(days), int(hours), int(mins), int(secs));
  212.     tts = String(ccc);
  213.     return tts;
  214. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-26 09:41:06 | 显示全部楼层
arduino+w5500做的设备端:不断电运行12天了
http://www.fuhome.net/home/?id=40


esp8266 做的wifi设备端:
http://www.fuhome.net/home/?id=436
回复 支持 反对

使用道具 举报

发表于 2015-5-26 10:47:52 | 显示全部楼层
八错,正想使用nodemcu玩玩呢,你个对arduino来说,更亲民了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-27 13:02:47 | 显示全部楼层
最新SDK1.1 支持包
网盘地址:链接:http://pan.baidu.com/s/1bnEXNGj 密码:2lqc
已经支持ESP-12E 模块
1:安装arduino1.64
2:再将本rar中的portable目录释放至arduino目录中
注意与arduino.exe同级
SDK:1.1
更新日期2015-5-27
源头:https://github.com/esp8266/Arduino
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-16 22:27 , Processed in 0.036044 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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