首页 > 评测 > ESP8266最佳开发板--ESP-LAUNCHER开发板评测

ESP8266最佳开发板--ESP-LAUNCHER开发板评测

乐鑫   ESP8266   Launcher   开发板    espressif   
  • 作者:SATURN
  • 来源:21ic
  • [导读]
  • 要评选中国影响力十大芯片,ESP8266必在其中。虽然开发文档有些混乱,各种生态纷杂,但它的低价,给了开发者更低门槛,也让更多人都参与到WiFi的开发体验中来。 从这种意义上来说,ESP8266是一款伟大的SoC!可能生态太繁茂了,所以官方开发板显得并不重要,曝光度也不高。但是我们还是想要尝试一下它的开发体验。下面正文开始

参考官方原理图,这里可以使用GPIO12来做试验。

接下来就可以使用ARDUINO的blink程序来测试了,代码太常见,不上了!

说下插曲,按官方的文档,直接将GPIO0开关拔下来,就可以下载代码了,但是实际使用的时候没用,非得先关闭电源开关,然后再上电,刷刷刷的就开刷了!

第二个程序要来体验一下WIFI连接及测试情况,这个也简单,参考官方代码并精简一下,得到如下代码

// Visual Micro is in vMicro>General>Tutorial Mode
// 
/*
    Name:       wificlient.ino
    Created:   2018/8/17 17:43:41
    Author:     DESKTOP\hnlsm
*/

// Define User Types below here or use a .h file
//
#include <ESP8266WiFi.h>

const char* ssid = "xxxx";
const char* password = "xxxx";

// Define Function Prototypes that use User Types below here or use a .h file
//


// Define Functions below here or use other .ino or cpp files
//

// The setup() function runs once each time the micro-controller starts
void setup()
{
     Serial.begin(115200);
     delay(10);

     Serial.println("Connecting to Local WiFi.");
     WiFi.mode(WIFI_STA);
     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());

}

// Add the main program code into the continuous loop() function
void loop()
{

}

默认使用DHCP方式从路由器获取IP地址,然后使用串口打印出来,loop()里什么也不干!

得到串口输出如下

image9.png

成功获取到IP地址,至此,已成功加入网络世界!

然而,这样并没有什么用!物联的魅力在于远程信息的获取及控制,所以咱得再来点个灯,不同的是,这一次点灯是通过网络来进行控制的。

网络通信的方式很多,低级一点的直接socket来进行,高级的则可以使用http来实现,不过这里咱们要来体验一把mqtt方式通信。

mqtt是专门用于物联网通信的协议,底层基于TCP/IP协议。mqtt通信效率高,可靠并且非常容易实现。Arduino平台有许多现成可用的,如PubSubClinet就是Arduino平台上使用频率非常高的一个组件。

关于mqtt,有兴趣的可以网上找找资料,非常好的一款物联网通信协议,这里不多介绍,上一段最精简的代码,实现网络点灯。

// Visual Micro is in vMicro>General>Tutorial Mode
// 
/*
Name:       wificlient.ino
Created:  2018/8/17 17:43:41
Author:     DESKTOP\hnlsm
*/

// Define User Types below here or use a .h file
//
#include <ESP8266WiFi.h>
#include <PubSubClient.h>

const char* ssid = "xxxx";
const char* password = "xxxx";
const char* mqtt_server = "192.168.88.22";
#define LED 12
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);

// Define Function Prototypes that use User Types below here or use a .h file
//


// Define Functions below here or use other .ino or cpp files
//

// The setup() function runs once each time the micro-controller starts
void setup()
{
     pinMode(LED, OUTPUT);
     Serial.begin(115200);
     delay(10);

     //setup wifi client
     Serial.println("Connecting to Local WiFi.");
     WiFi.mode(WIFI_STA);
     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());

     //setup mqtt client
     mqttClient.setServer(mqtt_server, 1883);
     mqttClient.setCallback(callback);

}

void callback(char* topic, byte* payload, unsigned int length) {

     //for test only
     char temp[40];
     int i;
     for (i = 0; i < length; i++) {
         temp[i] = payload[i];

     }
     temp[i] = '\0';
     Serial.println(topic);
     Serial.println(temp);

     //program logic goes here
     if (strcmp(topic, "led") == 0) {
         if ((char)payload[0] == '1') {
              digitalWrite(LED, LOW);
         }
         else {
              digitalWrite(LED, HIGH);
         }
     }

}

void reconnect() {
     while (!mqttClient.connected()) {
         if (!mqttClient.connect("ESP8266Client")) {
              delay(5000);
         }

         mqttClient.subscribe("led");
     }

}


// Add the main program code into the continuous loop() function
void loop()
{
     if (!mqttClient.connected()) {
         reconnect();
     }

     mqttClient.loop();


}

mqtt需要一个服务器,服务器的作用是检查用户发布的消息,并将之发布到订阅了相关主题(topic)的用户,在程序的开头,除了指定WIFI配置相关参数,还指定了mqtt服务器,mqtt服务器默认的port号为1883。

reconnect()函数检查是否连接正常,如果正常,向用服务器订阅topic为led的消息,如果其它结点发布消息到该主题,esp8266就会接收到相关的消息。

代码的核心在callback函数里,当接收到一个订阅消息,先检查其主题是否为led,如果是,检查消息负载是0还是1,如果接收到的消息是0,灭灯,否则点亮灯!就这么简单,程序做了精简,只是为了演示功能,并没有考虑容错处理。

现在可以在另一个结点上发布消息来控制LED灯的亮灭。这里使用mosquitto来测试,如下

image10.png

mosquitto_pub命令的-t参数指定topic,-m参数指定消息,执行命令后在ESP8266的串口可以看到相关的内容输出

image11.png

当然,GPIO12对应的LED灯也会相应的点亮或熄灭!

程序中也可以将采集到的传感器如温度、湿度等信息publish出去,供其它设备读取,从而实现ESP-LAUNCHER真正的物联功能!

 

除了支持C/C++之外,ESP8266还支持Javascript,MicroPython等编程语言,有兴趣的童鞋可以到官网上查看相关的支持,http://esp8266.net/上有很多有趣的资源。

  • 本文系21ic原创,未经许可禁止转载!

网友评论