远程控制通讯——基于Arduino IDE ESP8266控制LED灯(不需要arduino)

作者:chenyuechi | 更新时间:2016-05-29

一、目标

通过ESP8266连接贝壳物联服务,实现远程控制LED灯亮灭,并将结果反馈至控制界面。


二、硬件

三、软件

 首先下载arduino IDE 百度网盘:http://pan.baidu.com/s/1qWSpA92

 安装arduino成功后,再根据arduino中文社区一位大神的教程配置一下环境:http://www.arduino.cn/thread-17895-1-1.html

如果wifi块是ESP8266-01的按以下接线:(按烧写模式接线)

运行模式接线方法:(用USBTTL串口连接模块与PC)

esp8266-01         u转串

VCC-----------3.3

GND----------GND

CH_PD--------3.3

RX-------------TX

TX-------------Rx

GPIO2---------LED正极

GND------------LED负极


其余引脚为空。

烧写模式接线方法:烧写模式时需要将gpio0接地,工作模式时gpio0悬空

(注意有时8266需要独立供电,不直接在ttl取电,很多出现问题都在供电上,别对自己的电源太自信)

参考这篇帖子上的说明进行接线:http://www.arduino.cn/forum.php?mod=viewthread&tid=17896&page=1&extra=#pid148026

四、代码

#include <ESP8266WiFi.h>
 WiFiClient client;
#define relay1 2 //LED连接在8266的GPIO2上
const char *ssid     = "*****";//这里是我的wifi,你使用时修改为你要连接的wifi ssid
const char *password = "**********";//你要连接的wifi密码
const char *host = "121.42.180.30";

void setup() {
  Serial.begin(115200);
  delay(10);
  pinMode(relay1,OUTPUT);
  // We start by connecting to a WiFi network

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");  
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  const int httpPort =8181;
  if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
    return;
  }
  Serial.print("connecting to ");
  Serial.println(host);
  client.write("{\"M\":\"checkin\",\"ID\":\"***\",\"K\":\"*******\"}\r\n");//登陆设备,修改成自己的ID和key
  delay(10);
}

void loop() {
 char valueread;
      while(client.available()){
      String line = client.readStringUntil('\r');
     Serial.print(line);
     int i;     
     for(i=0;i<=150;i++)
     { 
      if((line[i]=='o') &&( line[i+1]=='n'))
      {  
        digitalWrite(relay1,HIGH);
        client.write("{\"M\":\"say\",\"ID\":\"ALL\",\"C\":\"LED1 is on\",\"SIGN\":\"ok\"}\r\n");        
        }

         if((line[i]=='o') && (line[i+1]=='f'))
      {  
        digitalWrite(relay1,LOW);
        client.write("{\"M\":\"say\",\"ID\":\"ALL\",\"C\":\"LED1 is off\",\"SIGN\":\"ok\"}\r\n");  
       }
  
     
     }   
  }
  client.write("{\"M\":\"say\",\"ID\":\"***\",\"C\":\"123456\"}\r\n");//修改自己的ID,向设备发送信息,防止掉线
  delay(2000);
}



评论:共19条

贝壳物联 评论于:2016-03-18 21:27:02
多谢分享,注释很详细!
chenyuechi 回复于:2016-03-18 21:29:41
回复 @贝壳物联:我这个识别指令的方法好蠢,靠数位,哭虾
贝壳物联 回复于:2016-03-18 21:52:05
回复 @chenyuechi:json数据的顺序,万一改变,这个方法就不行了-_-!!!
命令可以长一点,判断接收到的字符串中是否包括你发送的命令。
wony366 回复于:2016-04-05 19:25:18
回复 @贝壳物联站长,回复怎么不能带符合呀,我晕
贝壳物联 回复于:2016-04-07 09:58:50
回复 @wony366: 修复了一下,你再试试
peter 回复于:2016-10-11 17:25:38
回复 @chenyuechi:你好,按你的程序烧到ESP8266里可以联网,控制开打“on”LED亮,但打
“of”或者"off"LED不能关闭,贝壳网站返回一直是:LED1 is on,不知道我哪里没搞对,请指教下,谢谢。
bmy9 回复于:2017-07-27 20:47:13
回复 @peter:我现在也有这个问题。。
ωǒ为иǐ存在 回复于:2018-04-07 14:06:51
回复 @bmy9:你的问题解决了吗?我也遇到了不会呢
z956618955 回复于:2018-10-15 11:19:30
回复 @peter:你好 我和你的情况一样 你调试好了吗
z956618955 回复于:2018-10-15 12:00:04
回复 @ωǒ为иǐ存在:你好拟解决了吗
ωǒ为иǐ存在 回复于:2018-11-05 21:45:54
回复 @z956618955:解决了
ETHOME 回复于:2019-02-19 21:03:01
回复 @贝壳物联:作者已经没有在贝壳了吗? 我按这个代码写进去以后,发现经常会掉线不会重连,有什么解决办法吗
厝命1 回复于:2019-04-03 01:09:41
回复 @贝壳物联:请问按作者的方法进行操作后,led灯常亮并且贝壳网显示不在线是怎么回事呢 纯小白 ballball大佬
wony366 评论于:2016-04-05 19:21:48
这个例子很不错,我试了,很成功,本人是个业余arduino 爱好者我想问下 client.write 的语法是怎样的,github 上好像没有单独介绍的,比如 “ 有些不明白,我自己照你这大致的编写方法写了一句 client.writeMupdateID138V119trn 用来上传温度,t 是温度标量,串口输出是正常传感器温度,但是 传不到平台,一直更新不了温度值,138 是设备ID,119 是数据接口ID,希望大神能给予帮助。
奋斗し 回复于:2019-04-24 15:50:31
回复 @wony366:尝试一下重连贝壳物联平台,设置后在开始透传
wony366 评论于:2016-04-05 19:23:24
是什么时候用,有些不明白。。。。传字母符合时是怎么用,传变量时又怎么用?
火箭飞行兵 评论于:2016-05-24 10:00:10
您好、我是小白、请问一下47位是怎么数的、
chenyuechi 回复于:2016-05-25 17:43:21
回复 @火箭飞行兵:我改进了程序,你再看一下
厝命1 评论于:2019-04-03 00:55:56
按作者的方法进行操作后,led灯常亮并且贝壳网显示不在线是怎么回事呢 纯小白 各位大佬求救
评论支持使用[code][/code]标签添加代码
返回顶部