求助!!!ESP8266在arduino中编程问题-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 59982|回复: 37

[已解决] 求助!!!ESP8266在arduino中编程问题

[复制链接]
发表于 2015-1-19 00:13 | 显示全部楼层 |阅读模式
1金币
我买的esp8266-01型号,现在想通过ardunio板子连接8266实现无线传输,但没有库文件,自己也不太懂编程,不知道像8244的一些命令,如AT+RST,AT+CIPMUX怎么用到arduino编程中呀?请高手指点呀!!!

发表于 2015-1-19 00:47 | 显示全部楼层
看8266手册,写指令
 楼主| 发表于 2015-1-19 08:49 | 显示全部楼层
大神,能不能说的具体点,手册我是看了,怎么写指令呢?我意思怎么用arduino编出8266识别的命令,比如AT+RST这个命令,能不能define RST=AT+RST?
发表于 2015-1-19 13:27 | 显示全部楼层
给你个我的范例,yeelink报送数值型传感器数据的例子。
我的是用 调试工具设置好模式=3,wifi连接名称密码后插在uno上。
这是我的例子。http get
用的软串口 1.5.7 ide
tx 插8 rx 插9脚

[mw_shl_code=c,true]#include <SoftwareSerial.h>
unsigned long lastTime;
SoftwareSerial WIFISerial(8, 9); // RX, TX

//---------------------------------------------------------------------
void setup()  
{
  pinMode(13,OUTPUT);

  Serial.begin(9600);
  WIFISerial.begin(9600);

  delay(300);
  WIFISerial.println("AT+RST");
  
  lastTime=millis();
}
//---------------------------------------------------------------------
void loop() {



unsigned long tmpTime=millis();
if (tmpTime-lastTime==5000) {
WIFISerial.println("AT+CIPSTART=\"TCP\",\"api.yeelink.net\",80");
digitalWrite(13,HIGH);
}

tmpTime=millis();
if (tmpTime-lastTime==8000) {

int a1val = analogRead(3);
Serial.print("VAL:");
Serial.println(a1val);
String hcontent = sendData(a1val,"你的yeelink api",设备id,传感器id);
postHTTP(hcontent);
}

tmpTime=millis();
if (tmpTime-lastTime==10000) {
WIFISerial.println("AT+CIPCLOSE");
digitalWrite(13,LOW);
}

tmpTime=millis();
if (tmpTime-lastTime>=30000) {
lastTime=millis();
}


   
  if (WIFISerial.available())
    Serial.write(WIFISerial.read());
  if (Serial.available())
    WIFISerial.write(Serial.read());
}



//==========================================================
void postHTTP(String ptxt)
{
WIFISerial.print("AT+CIPSEND=");
WIFISerial.println(ptxt.length()+2);
WIFISerial.println(ptxt);
//delay(300);

}

//==========================================================
//完整模块
//用法:Serial.print(sendData(123,"APIKEY",DEVICEID,SENSORID));

String sendData(int SensorData , String APIKEY , int DEVICEID ,int SENSORID) {
  String pData="";
  pData+="POST /v1.0/device/";
  pData+=DEVICEID;
  pData+="/sensor/";
  pData+=SENSORID;
  pData+="/datapoints HTTP/1.1\r\nHost: api.yeelink.net\r\nAccept: */*\r\nU-ApiKey: ";
  pData+=APIKEY;
  pData+="\r\nContent-Length: ";
  int thisLength = 10 + getLength(SensorData);
  pData+=thisLength;
  pData+="\r\nContent-Type: application/x-www-form-urlencoded\r\nConnection: close\r\n\r\n";
  // PUT回复内容
  pData+="{\"value\":";
  pData+=SensorData;
  pData+="}\r\n\r\n";
  return pData;
}

int getLength(int someValue) {
  int digits = 1;
  int dividend = someValue /10;
  while (dividend > 0) {
    dividend = dividend /10;
    digits++;
  }
  return digits;
}
//完整模块结束
//==========================================================[/mw_shl_code]

点评

好贴,学习  发表于 2015-5-22 23:11
 楼主| 发表于 2015-1-19 18:39 | 显示全部楼层
bxworks 发表于 2015-1-19 13:27
给你个我的范例,yeelink报送数值型传感器数据的例子。
我的是用 调试工具设置好模式=3,wifi连接名称密码 ...

太厉害了,太感谢了,我好好研究一下,很高深呀,对于我这个编程新手来说
发表于 2015-1-19 20:48 | 显示全部楼层
不高深的。。
Serial.println("AT+RST")
这个发送给 模块。模块就可以响应

我上面的范例,主要用到了。 软串口,socket构造HTTP协议的POST,然后AT命令发送到ESP8266即可

ESP8266模块这几天我也在调试。
注意几个问题。
1.刷机必须用FT232芯片的USB转TTL模块。(PL2303老是出错CH340也出错)
2.ESP8266供电必须足,否则容易不启动(最好单独供电3.3V,5v好像也可以用,我试了一晚上没烧)。
3.注意模块的版本,老版本的0.9.1.x的默认速率是115200,0.9.2.x以上的全部都是9600了。
4.尽量别用扫描WIFI命令,模块经常会卡死反馈busy
5.模块的性能一般,只能说小数据够用。(我10秒内,3个POST可以成功,在多就容易失败了。而且模块会丢包,ping不通几下)

暂时就发现这些。欢迎大家补充。

点评

支持你的观点,感谢分享!  发表于 2015-1-24 19:53
 楼主| 发表于 2015-1-19 22:32 | 显示全部楼层
bxworks 发表于 2015-1-19 20:48
不高深的。。
Serial.println("AT+RST")
这个发送给 模块。模块就可以响应

啊?大神,你的意思是8266很慢?我的想法是一个ttl的摄像头接到uno板上,然后再通过8266传输到电脑或者手机上,这个应该怎么做呀?
发表于 2015-1-20 00:50 | 显示全部楼层
估计不行,你试试吧。
我试了下,多次发送数据间的间隔,要在100ms左右。否则会丢数据。
测试的时候,我本来准备一行一行发的。结果发现要延迟,否则不成功。
最后没办法,就把要发的数据连起来,一次发出去。
 楼主| 发表于 2015-1-20 18:52 | 显示全部楼层
bxworks 发表于 2015-1-20 00:50
估计不行,你试试吧。
我试了下,多次发送数据间的间隔,要在100ms左右。否则会丢数据。
测试的时候,我本 ...

大神,我怎么总是调试不成功呢?我用自己编写的代码下载到板子上以后,从ide自带的串口窗口发命令没反应。程序如下:
#include <SoftwareSerial.h>
SoftwareSerial WIFISerial(0, 1); // RX, TX
void setup()
{
  Serial.begin(9600);
  delay(2000);
  Serial.println("AT+RST");
  delay(2000);
  Serial.println("AT+CWLAP");
}
void loop(){
}
但用别人的一个程序下载后,就可以发命令,测试正常。他的程序是这个:
void setup() {
  pinMode(0,INPUT_PULLUP);
  pinMode(1,INPUT_PULLUP);

}

void loop() {
  // put your main code here, to run repeatedly:

}
请问怎么回事呀?
发表于 2015-1-20 23:05 | 显示全部楼层
0,1脚是uno的真串口,不能在用软串口定义了。
用法有误。
接法
模块的 tx 插D8脚
模块的 rx 插D9脚
VCC-3.3v
gnd-gnd
ch-pd-3.3v

这样插好。


[mw_shl_code=c,true]#include <SoftwareSerial.h>
SoftwareSerial WIFISerial(8, 9); // RX, TX
void setup()
{
  Serial.begin(9600);
  
  WIFISerial.begin(9600);
  delay(2000);
  WIFISerial.println("AT+RST");
  delay(2000);
  WIFISerial.println("AT+CWMODE=3"); //ap+sta mode
  delay(2000);
  WIFISerial.println("AT+CWJAP=\"wifiSSID\",\"wifiPass\""); //connect to router!
  delay(3000);
}

void loop(){

  
if (WIFISerial.available()){
    Serial.write(WIFISerial.read());}
  if (Serial.available()){
    WIFISerial.write(Serial.read());
}
  
}[/mw_shl_code]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 00:44 , Processed in 0.158653 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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