Ядро набора – плата NodeMCU, которая основана на WiFi модуле ESP8266, представляющем собой полноценный 32-битный микроконтроллер, который на данный момент составляет серъезную конкуренцию плате Arduino.
К данному набору прилагается онлайн-учебник на английском языке (
http://osoyoo.com/2016/11/28/3596/) – набор примеров для всех датчиков с подробными комментариями.
Для подключения к Интернету вещей в примерах используется очень популярный и простой IoT протокол – MQTT. MQTT (Message Queue Telemetry Transport) – лёгкий сетевой протокол работающий поверх TCP/IP. Используется для обмена сообщения между устройствами по принципу издатель-подписчик (publish–subscribe).
Программирование примеров рассмотрено в среде Arduino IDE для ESP8266. Если у вас есть некоторый опыт в кодировании Arduino, вы cможете начать программировать NodeMCU в кратчайшие сроки.
Изучив примеры вы сможете быстро перейти к созданию собственных проектов в области Интернета вещей.
Рассмотрим установку Arduino IDE для ESP8266.
Сначала необходимо скачать Arduino IDE с
официального сайта версии не ниже 1.6.5. Запускаем Arduino IDE. Выбираем пункт
Файл à Настройки и в поле
Additional Boards Manager URLs вводим
http://arduino.esp8266.com/stable/package_esp8266com_index.json. Нажимаем
OK.
Выбираем пункт
Инструменты à Плата à BoardsManager и в списке ищем плату ESP8266. Выбираем этот пункт, версию и нажимаем на
Install.
После загрузки программного обеспечения в списке плат (
Инструменты à Плата à) появятся платы ESP8266.
Рассмотрим пример подключения датчика влажности и температуры DHT11 к плате NodeMCU ESP8266 и отправку данных по протоколу MQTT в интернет на сервер
http://www.mqtt-dashboard.com/.
Нам потребуются следующие компоненты из набора:
Создаем новый скетч следующего содержания:
#include
#include
#include
dht DHT;
// подключение датчика DHT11 к pin 3
#define DHT11_PIN D3
// Установить свои настройки сети
const char* ssid = "your_hotspot_ssid";
const char* password = "your_hotspot_password";
const char* mqtt_server = "broker.mqtt-dashboard.com";
//const char* mqtt_server = "iot.eclipse.org";
WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char msg[50];
int value = 0;
void setup_wifi() {
delay(100);
// Подключиться к WiFi сети
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
randomSeed(micros());
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void callback(char* topic, byte* payload, unsigned int length)
{
Serial.print("Command is : [");
Serial.print(topic);
int p =(char)payload[0]-'0';
int chk = DHT.read11(DHT11_PIN);
// if MQTT comes a 0 message, показать humidity
if(p==0)
{
Serial.println("to show humidity!]");
Serial.print(" Humidity is: " );
Serial.print(DHT.humidity, 1);
Serial.println('%');
}
// if MQTT comes a 1 message, показать temperature
if(p==1)
{
// digitalWrite(BUILTIN_LED, HIGH);
Serial.println(" is to show temperature!] ");
int chk = DHT.read11(DHT11_PIN);
Serial.print(" Temp is: " );
Serial.print(DHT.temperature, 1);
Serial.println(' C');
}
Serial.println();
} //end callback
void reconnect() {
while (!client.connected())
{
Serial.print("Attempting MQTT connection...");
// Создать client ID - random
String clientId = "ESP8266Client-";
clientId += String(random(0xffff), HEX);
// Произвести соединение
//если MQTT broker имееет clientID,username and password
// используйте
// (client.connect(clientId,userName,passWord))
if (client.connect(clientId.c_str()))
{
Serial.println("connected");
//подключение к MQTT broker
client.subscribe("OsoyooCommand");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Пауза 6 секунд
delay(6000);
}
}
}
void setup() {
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
int chk = DHT.read11(DHT11_PIN);
Serial.print(" Starting Humidity: " );
Serial.print(DHT.humidity, 1);
Serial.println('%');
Serial.print(" Starting Temparature ");
Serial.print(DHT.temperature, 1);
Serial.println('C');
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
long now = millis();
// чтение данных с DHT11 каждые 6 секунд
if (now - lastMsg > 6000) {
lastMsg = now;
int chk = DHT.read11(DHT11_PIN);
String msg="real time temperature: ";
msg= msg+ DHT.temperature;
msg = msg+" C ;real time Humidity: " ;
msg=msg+DHT.humidity ;
msg=msg+"%";
char message[58];
msg.toCharArray(message,58);
Serial.println(message);
// отправить данные в MQTT broker
client.publish("OsoyooData", message);
}
}
Вносим в скетч следующие изменения:
SSID и пароль для точки подключения платы NodeMCU к вашей сети:
const char* ssid = "your_hotspot_ssid";
const char* password = "your_hotspot_password";
Если Вы будете использовать другой MQTT сервер, поменяйте его название в следующей строке:
const char* mqtt_server = "broker.mqtt-dashboard.com";
Загружаем скетч на нашу плату NodeMCU, открываем монитор последовательного порта и если соединения указаны правильно, видим отправку данных влажности и температуры датчика на сервер.
На странице
http://osoyoo.com/2016/11/28/3596/ вы можете посмотреть другие примеры.
Рекомендуемые книги