用Arduino平台 编译ESP8266(单芯片,不需要at指令)
本帖最后由 wxws 于 2015-5-26 09:32 编辑ESP8266ARDUINO支持包
开了个群,专门讨论这个: 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关系:
http://nodemcu.com/images/thumbnail/z1s_1.jpg_450x300.jpg
就是个普通8266模块+WCH340 USB串口,并支持自动复位,就象以前的arduino一样。
本来由国内大能将LUA语言,内置在了8266中,开发也较以前AT方便,也能单芯片,可
惜的是,8266内存不够,跑了LUA,错误百出。
当然,本支持包也直接支持8266模块,接线图:
https://raw.githubusercontent.com/Links2004/Arduino/esp8266/docs/ESP01_connect.jpg
本帖最后由 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/*
8266fuhome.ino:
by:wxwsqq:1103012
群:Arduino_ESP8266开发 104345601
协议:
http://www.fuhome.net/api/must/
服务器IP:115.28.93.201
udp端口:7001
30s
心跳发送: f=1设备id密码
心跳:f=1&d=设备id&m=密码&from=sb->server
心跳收到返回:f=1&d=设备id&from=server->sb1
远程收到命令:f=a&d=设备id&n=jyzhkj&com=open&from=server->sb
命令返回:f=b设备id密码 用户名响应消息(可自定义)
返回:f=b&d=设备id&m=密码&n=jyzhkj&com=open&from=sb->server
*/
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#define DHCP 0
WiFiUDP Udp;
char ssid[] = "jyzhkj0";//your network SSID (name)
char pass[] = "868996310"; // your network password
unsigned int localPort = 7001; // 本地端口
IPAddress rip(115, 28, 93, 201); //fuhome的服务器ip
unsigned int rPort = 7001; // 服务器端口
String deviceid = "00000000"; //改成你的设备ID,需先在fuhome.net上注册,并增加一个新设备,详见网站
String deviceps = "0123456789"; //设备密码
String Heart = "";
String HeartTemp = "f=1&d=%s1&m=%s2&z=%s3&from=sb->server"; //心跳包模板
String ReplyTemp = "f=b&d=%s1&m=%s2&n=%s3&com=%s4&from=sb->server"; //命令包模板
String SendValue = "f=d&d=%s1&m=%s2&num=123&c=1&a=%s3&from=sb->server";//设备附加传感器数据
String udpget = "";
String usename = "";
String command = "";
char ttc;
#define LED 16 //板载LED灯GPIO16口
int ledstate = 1;
unsigned int RemoteCount = 0;
void setup()
{
Serial.begin(115200);
// start the Ethernet and UDP:
pinMode(LED, OUTPUT);
digitalWrite(LED, 0);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
Udp.begin(localPort);
ReplyTemp.replace("%s1", deviceid);
ReplyTemp.replace("%s2", deviceps);
SendValue.replace("%s1", deviceid);
SendValue.replace("%s2", deviceps);
}
void loop()
{
// if there's data available, read a packet
int packetSize = Udp.parsePacket();
if (packetSize)
{
udpget = "";
for (int i = 0; i < packetSize; i++)
{
udpget += (char)Udp.read();
}
Serial.print(getuptime());
Serial.print(" R:");
Serial.println(udpget);
if (udpget.indexOf("f=a") >= 0)//心跳包不响应
{
usename = Findany("&n=");
command = Findany("&com=");
if (command == "open")
{
ledstate = 1;
command = "完成" + command;
}
if (command == "close")
{
ledstate = 0;
command = "完成" + command;
}
if (command == "flash")
{
ledstate = 2;
command = "完成" + command;
}
udpget = ReplyTemp;
udpget.replace("%s3", usename);
udpget.replace("%s4", command);
udpget.toCharArray(ttc, 100);
Serial.print(" Send reply:");
Serial.println(udpget);
//Udp.beginPacket( rip,rPort );
Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
Udp.write(ttc); //状态响应回复包f=b&d=设备ID&m=设备密码&n=jyzhkj&com=命令&from=sb->server
Udp.endPacket();
RemoteCount++;
}
else
{
// if (udpget.indexOf("f=1") >= 0)//心跳包
// Serial.println("Recive f=1.");
// if (udpget.indexOf("f=b") >= 0)//回复包
// Serial.println("Recive f=b.");
}
}
LedControl();
UdpHeart();//心跳
UpValue();//传感器上传
}
//灯状态切换
void LedControl()
{
static long previousMillis = 0;
static int currstate = 0;
switch (ledstate)
{
case 0:
currstate = 1;
break;
case 1:
currstate = 0;//点亮
break;
case 2:
if (millis() - previousMillis > 200)//200ms
{
previousMillis = millis();
currstate = 1 - currstate;
}
break;
}
digitalWrite(LED, currstate);
}
//查找参数,下一个“&”为界
String Findany(String findstr)
{
String ttv = "";
int t1, t2;
t1 = udpget.indexOf(findstr);
if (t1 >= 0)
{
t2 = udpget.indexOf("&", t1 + 1);
ttv = udpget.substring(t1 + findstr.length(), t2);
}
return ttv;
}
//上传 传感器值
void UpValue()
{
static unsignedint previouscount = 999;
if (previouscount != RemoteCount)
{
previouscount = RemoteCount;
Heart = SendValue;
Heart.replace("%s1", deviceid);//d
Heart.replace("%s2", deviceps);//m
Heart.replace("%s3", String(RemoteCount));//传感器值
Serial.print(getuptime());
Serial.print(" V:");
Serial.println(Heart);
Heart.toCharArray(ttc, 200);
Udp.beginPacket(rip, rPort);
Udp.write(ttc); //心跳包 f=1&d=设备ID&m=设备密码&from=sb->server
Udp.endPacket();
}
}
//UDP心跳包
void UdpHeart()
{
static long previousMillis = -4000;
if (millis() - previousMillis > 30000)//30秒
{
previousMillis = millis();
Heart = HeartTemp;
Heart.replace("%s1", deviceid);//d
Heart.replace("%s2", deviceps);//m
Heart.replace("%s3", getuptime());//z状态
Serial.print("ESP.getFreeHeap():");
Serial.println(ESP.getFreeHeap());
Serial.print(getuptime());
Serial.print(" S:");
Serial.println(Heart);
Heart.toCharArray(ttc, 200);
Udp.beginPacket(rip, rPort);
Udp.write(ttc); //心跳包 f=1&d=设备ID&m=设备密码&from=sb->server
Udp.endPacket();
}
}
Stringgetuptime() //从millis转换成 天数:小时:分:秒
{
String tts = "";
long days = 0;
long hours = 0;
long mins = 0;
long secs = 0;
char ccc;
secs = millis() / 1000; //convect milliseconds to seconds
mins = secs / 60; //convert seconds to minutes
hours = mins / 60; //convert minutes to hours
days = hours / 24; //convert hours to days
secs = secs - (mins * 60); //subtract the coverted seconds to minutes in order to display 59 secs max
mins = mins - (hours * 60); //subtract the coverted minutes to hours in order to display 59 minutes max
hours = hours - (days * 24); //subtract the coverted hours to days in order to display 23 hours max
sprintf(ccc, "%02d:%02d:%02d:%02d", int(days), int(hours), int(mins), int(secs));
tts = String(ccc);
return tts;
} arduino+w5500做的设备端:不断电运行12天了
http://www.fuhome.net/home/?id=40
esp8266 做的wifi设备端:
http://www.fuhome.net/home/?id=436 八错,正想使用nodemcu玩玩呢,你个对arduino来说,更亲民了:lol 最新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
页:
[1]