这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 物联网技术 » 【Joytag 学ESP8266】通过MQTT 控制ESP8266 LED

共3条 1/1 1 跳转至

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

专家
2016-06-06 13:19:34     打赏
简介

前边一系列文章中,我们在香蕉派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
  2. #include

  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. Serial.begin(115200);
  69. setup_wifi();
  70. client.setServer(mqtt_server, 1883);
  71. client.setCallback(callback);
  72. }

  73. void loop() {

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

香蕉派上控制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灯。
谨以本文抛砖引玉,希望大家折腾出更好玩的东西。


专家
2016-06-07 09:25:07     打赏
2楼

代码都是从隔壁狗爬复制过来的吧,都不给格式化一下,懒 坐 台


专家
2016-06-07 12:29:43     打赏
3楼

为啥include后边没东西呢


  1. #include <ESP8266WiFi.h>
  2. #include <PubSubClient.h>

补上


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]