Construa seu primeiro device IoT
Roberto Barros



IoT = Internet of Things
...é que uma rede de objetos físicos capaz de coletar e transmitir dados. É uma extensão da internet atual que possibilita que objetos do dia-a-dia se conectem à Internet.
Para isso vamos precisar de um microcontrolador

Arduino

Problema: não se conecta à internet
Vantagem: Possui ótimas ferramentas de desenvolvimento

ESP8266 (nodemcu)

Pode ser usado com a IDE do arduino:
Outras Opções

ESP32
Wifi + Bluetooth

ESP01
Compacto
Nosso primeiro Software
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}Blink Led
void setup() {
pinMode(D4, OUTPUT);
}
void loop() {
digitalWrite(D4, LOW);
delay(1000);
digitalWrite(D4, HIGH);
delay(2000);
}E se quisermos controlar uma carga maior?


Blink Lamp
void setup() {
pinMode(D0, OUTPUT);
}
void loop() {
digitalWrite(D0, LOW);
delay(1000);
digitalWrite(D0, HIGH);
delay(2000);
}Vamos conectar na internet
#include <ESP8266WiFi.h>
const char* SSID = "Nome da Rede";
const char* PASSWORD = "Senha da Rede";
void initWiFi() {
Serial.println("Conectando-se em: " + String(SSID));
WiFi.begin(SSID, PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("");
Serial.println("WiFi conectado");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void setup() {
Serial.begin(115200);
initWiFi();
}
void loop() {
}MQTT
Message Queuing Telemetry Transport é um protocolo de mensagens leve para sensores e pequenos dispositivos móveis otimizado para redes TCP/IP não confiáveis ou de alta latência. O esquema de troca de mensagens é fundamentado no modelo Publicador-Subscritor.

MQTT Brokers

Outros brokers públicos:

Configurando o MQTT

Setup do PubSub
#include <PubSubClient.h>
const char* BROKER_MQTT = "iot.eclipse.org";
int BROKER_PORT = 1883;
const char* TOPIC = "lewagon-iot-lamp";
WiFiClient espClient;
PubSubClient MQTT(espClient);
void initMQTT() {
MQTT.setServer(BROKER_MQTT, BROKER_PORT);
}
void setup() {
initMQTT();
}Conectando o Broker
void connectMQTT() {
while (!MQTT.connected()) {
Serial.println("Tentando se conectar ao Broker MQTT: " + String(BROKER_MQTT));
if (MQTT.connect("clientId-lewagon-iot-lamp")) {
Serial.println("Conectado");
MQTT.subscribe(TOPIC);
} else {
Serial.println("Falha ao Conectar. Tentando novamente em 2 segundos");
delay(2000);
}
}
}
void loop() {
if (!MQTT.connected()) {
connectMQTT();
}
MQTT.loop();
}Callback
void initMQTT() {
MQTT.setServer(BROKER_MQTT, BROKER_PORT);
MQTT.setCallback(mqtt_callback);
}
void mqtt_callback(char* topic, byte* payload, unsigned int length) {
String message;
for (int i = 0; i < length; i++) {
char c = (char)payload[i];
message += c;
}
Serial.println("Tópico => " + String(topic) + " | Valor => " + String(message));
Serial.flush();
}Ligando tudo!
void mqtt_callback(char* topic, byte* payload, unsigned int length) {
String message;
for (int i = 0; i < length; i++) {
char c = (char)payload[i];
message += c;
}
Serial.println("Tópico => " + String(topic) + " | Valor => " + String(message));
Serial.flush();
if (message == "on") {
digitalWrite(D0, HIGH);
} else {
digitalWrite(D0, LOW);
}
}
void setup() {
pinMode(D0, OUTPUT);
}Websocket
É uma tecnologia que permite a comunicação bidirecional. Websocket foi desenvolvido para ser implementado em browsers web e servidores web, mas pode ser usado por qualquer cliente ou aplicação servidor.

Client Web
<html>
<head>
<title>Client MQTT Web</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.1.0/paho-mqtt.min.js">
</script>
</head>
<body>
<button id='on'>Ligar</button>
<button id='off'>Desligar</button>
</body>
</html>Eclipse Paho JavaScript client:
Setup do Broker
<script>
var wsbroker = "iot.eclipse.org";
var wsport = 443;
var randomId = parseInt(Math.random() * 100, 10)
var client = new Paho.Client(wsbroker, wsport, "myclientid_" + randomId);
</script>
Conectando com o broker
<script>
client.connect({onSuccess:onConnect , useSSL: true});
function onConnect() {
client.subscribe("lewagon-iot-lamp");
console.log("Conectado");
}
</script>
Se o broker desconectar
<script>
client.onConnectionLost = onConnectionLost;
function onConnectionLost(responseObject) {
if (responseObject.errorCode !== 0) {
console.log("onConnectionLost:"+responseObject.errorMessage);
}
}
</script>
Quando um botão é clicado a mensagem é enviada
<script>
function sendMessage(message) {
return function() {
mqtt_message = new Paho.Message(message);
mqtt_message.destinationName = "lewagon-iot-lamp";
client.send(mqtt_message);
}
}
document.getElementById('on').addEventListener('click', sendMessage('on'));
document.getElementById('off').addEventListener('click', sendMessage('off'));
</script>
Recebendo a mensagem
<script>
client.onMessageArrived = onMessageArrived;
function onMessageArrived(message) {
console.log("onMessageArrived:"+message.payloadString);
}
</script>
Código completo
Obrigado!
Roberto Barros
roberto@scandix.com


Construa seu primeiro device IoT
By Roberto Barros
Construa seu primeiro device IoT
Construa seu primeiro device IoT - Workshop LeWagon
- 767