狗趴(GodPub),开源硬件学习与实践

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 10406|回复: 0
打印 上一主题 下一主题

【Joytag 学ESP8266】通过MQTT 控制ESP8266 LED

[复制链接]

84

主题

143

帖子

725

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
725
QQ
跳转到指定楼层
楼主
发表于 2016-6-6 13:15:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
原文信息

标题:【Joytag 学ESP8266】通过MQTT 控制ESP8266 LED
连接:http://forum.godpub.com/thread-124-1-1.html
备注:狗趴论坛首发,转载请注明出处。


简介

前边一系列文章中,我们在香蕉派M3上装mosquitto, mosquitto-clients,并介绍了如何使用。
我们还介绍了如何使用Arduino IDE开发ESP8266,以下为电梯直达:
【Joytag 香蕉派】在香蕉派M3上安装和使用Mosquitto
【Joytag 香蕉派】Mosquitto, mosquitto-clients 初接触
【Joytag 学ESP8266】使用Arduino IDE开发ESP8266
这个例子中,我们使用Arduino MQTT client for ESP8266,配合服务器端,以及mosquitto-clients工具,来实现远程控制“开发快”(小E)上的LED灯。


Arduino Client for MQTT

本例中,我们使用的是Arduino Client for MQTT,
github地址:https://github.com/knolleary/pubsubclient
官网地址:http://pubsubclient.knolleary.net/index.html
撰写本文时,最新版本是2.6.0

可以使用github下载安装,或者使用Arduino IDE的Library Manager来安装和管理。


Arduino 代码

代码中隐去了WIFI设置信息,以及MQTT Broker信息。
读者可以根据自己的情况设置。
文中只点亮和关闭红色LED,读者可以自己完善来实现更多功能。
  1. #include <ESP8266WiFi.h>
  2. #include <PubSubClient.h>

  3. const char* ssid = "xxxx";
  4. const char* password = "xxxxxxx";
  5. const char* mqtt_server = "x.x.x.x";

  6. WiFiClient espClient;
  7. PubSubClient client(espClient);

  8. #define PIN_RED 12
  9. #define PIN_GREEN 15
  10. #define PIN_BLUE 14

  11. void setup_wifi() {
  12.   delay(10);

  13.   Serial.println();
  14.   Serial.print("Connecting to ");
  15.   Serial.println(ssid);

  16.   WiFi.begin(ssid, password);
  17.   while (WiFi.status() != WL_CONNECTED) {
  18.     delay(500);
  19.     Serial.print(".");
  20.   }

  21.   Serial.println("");
  22.   Serial.println("WiFi connected");
  23.   Serial.println("IP address: ");
  24.   Serial.println(WiFi.localIP());
  25. }

  26. void callback(char* topic, byte* payload, unsigned int length) {
  27.   Serial.print("Message arrived [");
  28.   Serial.print(topic);
  29.   Serial.print("] ");
  30.   for (int i = 0; i < length; i++) {
  31.     Serial.print((char)payload[i]);
  32.   }
  33.   Serial.println();


  34.   if(strncmp((const char *)payload, "LEDON", length)==0){
  35.      Serial.println("ON");
  36.      digitalWrite(PIN_RED, LOW);
  37.   }
  38.   else if(strncmp((const char *)payload, "LEDOFF", length)==0)
  39.     digitalWrite(PIN_RED, HIGH);
  40.   else{
  41.     //do nothing
  42.   }
  43. }

  44. void reconnect() {
  45.   while (!client.connected()) {
  46.     Serial.print("Attempting MQTT connection...");
  47.     if (client.connect("ESP8266Client")) {
  48.       Serial.println("connected");
  49.       // Once connected, publish an announcement...
  50.       client.publish("JoyTag/MQTT/outTopic", "Reconnected");
  51.       // ... and resubscribe
  52.       client.subscribe("JoyTag/MQTT/inTopic");
  53.     } else {
  54.       Serial.print("failed, rc=");
  55.       Serial.print(client.state());
  56.       Serial.println(" try again in 5 seconds");
  57.       delay(5000);
  58.     }
  59.   }
  60. }

  61. void setup() {
  62.   pinMode(PIN_RED, OUTPUT);
  63.   pinMode(PIN_GREEN, OUTPUT);
  64.   pinMode(PIN_BLUE, OUTPUT);

  65.   digitalWrite(PIN_RED, HIGH);
  66.   digitalWrite(PIN_GREEN, HIGH);
  67.   digitalWrite(PIN_BLUE, HIGH);
  68.   
  69.   Serial.begin(115200);
  70.   setup_wifi();
  71.   client.setServer(mqtt_server, 1883);
  72.   client.setCallback(callback);
  73. }

  74. void loop() {
  75.   
  76.   if (!client.connected()) {
  77.     reconnect();
  78.   }
  79.   client.loop();
  80. }
复制代码


香蕉派上控制LED

香蕉派上控制LED,非常简单,只需在MQTT Broker的对应主题下发布消息即可。
  1. mosquitto_pub -t "JoyTag/MQTT/inTopic" -m LEDON -h x.x.x.x
  2. mosquitto_pub -t "JoyTag/MQTT/inTopic" -m LEDOFF -h x.x.x.x
复制代码

第一条命令发出后,“开发快”(小E)上的LED灯亮起了红色。
第二条命令发出后,“开发快”(小E)上的LED灯熄灭。
是不是很简单呢?

总结

这个例子中,我们使用Arduino MQTT client for ESP8266,配合服务器端,以及mosquitto-clients工具,来实现远程控制“开发快”(小E)上的LED灯。
谨以本文抛砖引玉,希望大家折腾出更好玩的东西。

后续更多精彩内容,请关注狗趴论坛:http://www.godpub.com

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
天理路上甚宽,稍游心,胸中便觉广大宏朗;
人欲路上甚窄,才寄迹,眼前俱是荆棘泥涂。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|狗趴(GodPub) Arduino&Raspberry Pi开源硬件学习与实践[QQ群:20085629]  

GMT+8, 2024-4-26 07:39 , Processed in 0.031401 second(s), 35 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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