IoT com Arduino
Conecte tudo na rede!
Prof. Me. Daniel Rodrigues de Sousa | professor.daniel.rsousa@gmail.com
Daniel Rodrigues de Sousa
 Engenheiro eletricista formado pela Universidade Cruzeiro do Sul –
2001
 Mestre em Ciências da Computação pela UFABC - 2016
 Autor dos livros Microcontroladores ARM7 – O poder dos 32 bits,
Desbravando o PIC24 – Conheça os Microcontroladores de 16 bits,
Desbravando o PIC18 – Recursos Avançados, Desbravando o
Desbravando o PIC18 – Ensino Didático, todos pela Editora Érica
Agenda
➢
O que é IoT?
➢
Camadas de Rede IoT.
➢
Message Queuing Telemetry Transport – MQTT.
➢
Proposta de IoT com Arduino.
➢
Código.
➢
Demonstração.
Internet das Coisas – Termos Pesquisados
Internet das Coisas – Definição
A Internet das Coisas (Internet of Things – IoT), é uma rede de
objetos físicos, veículos, prédios e outros que possuem tecnologia
embarcada, sensores e conexão com rede capaz de coletar e
transmitir dados.
IoT nada mais é que uma extensão da Internet atual, que proporciona
aos objetos do dia-a-dia (quaisquer que sejam), mas com capacidade
computacional e de comunicação, se conectarem à Internet.
Permite que os próprios objetos sejam acessados como provedores
de serviços. Estas novas habilidades, dos objetos comuns, geram
um grande número de oportunidades tanto no âmbito acadêmico
quanto no industrial.
Internet das Coisas – Definição
1990 - John Romkey e
Simon Hackett
apresentou o primeiro
dispositivo conectado a
rede: uma torradeira
elétrica
Internet das Coisas - Aplicações
Arquitetura Básica dos Dispositivos IoT
Microcontrolador/
microprocessador:
➢PIC
➢AVR
➢8051
➢MSP
➢ARM
➢x86
➢x86-64
Arquitetura Básica dos Dispositivos IoT
Comunicação:
➢Ethernet
➢Wi-Fi
➢BLE
➢ZigBee
➢3G/4G
➢SigFox
➢LoraWan
Arquitetura Básica dos Dispositivos IoT
Fonte de Energia:
➢Baterias
➢Pilhas
➢Fonte
➢Células
Fotoelétricas
➢Geradores Eólicos
➢Redes de comuni-
cação
Arquitetura Básica dos Dispositivos IoT
Sensores:
➢Tensão
➢Temperatura
➢Luminosidade
➢Gazes
Atuadores:
➢Relés
➢Motores
➢Equipamentos
Arquitetura Básica dos Dispositivos IoT
Modelo de Conectividade de Dispositivos IoT
Protocolos e Camadas para IoT
Camadas Internet TCP/IP IP IoT
Aplicação
HTTP, HTTPS, FTP,
SSH, etc...
CoAP, MQTT
Transporte TCP, UDP UDP
Internet IPv4, IPv6 6LoWPAN
Rede
IEEE 803.2 Ethernet /
802.11 Wi-Fi
IEEE 802.11,
IEEE 802.15
Message Queuing Telemetry Transport - MQTT
Message Queuing Telemetry Transport - MQTT
Proposta de um Sistema IoT com MQTT
Broker MQTT
Subscribe
PublishSubscriber/
Publisher
Subscriber/
Publisher
Subscriber/
Publisher
Proposta de um Sistema IoT com MQTT
Broker MQTT
Subscribe
PublishSubscriber/
Publisher
Subscriber/
Publisher
Subscriber/
Publisher
Raspbian Jessie + Eclipse Mosquitto
Proposta de um Sistema IoT com MQTT
Broker MQTT
Subscribe
PublishSubscriber/
Publisher
Subscriber/
Publisher
Subscriber/
Publisher
Sketch Arduino + PubSubClient.h
Proposta de um Sistema IoT com MQTT
Broker MQTT
Subscribe
PublishSubscriber/
Publisher
Subscriber/
Publisher
Subscriber/
Publisher
Sketch Arduino + PubSubClient.h
Proposta de um Sistema IoT com MQTT
Broker MQTT
Subscribe
PublishSubscriber/
Publisher
Subscriber/
Publisher
Subscriber/
Publisher
App MQTT Dash
Raspberry Pi
Raspberry Pi
Intel Edison
Intel Galileo / Galileo Gen 2
ESP8266 - Módulos
ESP8266 - Módulos
ESP01 + Conversor USB/RS232
Instalação das Placas ESP8266
Instalação das Placas ESP8266
Código Arduino (PubSubClient.h)
Código Arduino (ESP01 / Intel Edison)
#define Intel_Edison
#ifdef Intel_Edison
#include <WiFi.h>
#else
#include <ESP8266WiFi.h>
#endif
#include <PubSubClient.h>
char ssid[] = "Teste";
// Rede
char pass[] = "0123456789"; // Senha da Rede
int keyIndex = 0; // númeso indexador da rede (para redes WEP)
Código Arduino (ESP01 / Intel Edison)
int status = WL_IDLE_STATUS;
#ifdef Intel_Edison
#define LED_1 2
#define LED_2 3
#define LED_3 4
#else
#define LED_1 2
#endif
bool flag_debug = false;
IPAddress ip;
IPAddress server(192, 168, 1, 182);
Código Arduino (ESP01 / Intel Edison)
WiFiClient ethClient;
PubSubClient client(ethClient);
void setup()
{
Serial.begin(115200);
Serial.setTimeout(10);
pinMode(LED_1, OUTPUT);
digitalWrite(LED_1, LOW);
#ifdef Intel_Edison
pinMode(LED_2, OUTPUT);
digitalWrite(LED_2, LOW);
pinMode(LED_3, OUTPUT);
digitalWrite(LED_3, LOW);
Código Arduino (ESP01 / Intel Edison)
#endif
conecta_Wifi();
Serial.println("Conectado na rede Wifi!");
printWifiStatus();
ip = WiFi.localIP();
client.setServer(server, 1883);
client.setCallback(callback);
}
Código Arduino (ESP01 / Intel Edison)
void loop()
{
if (!client.connected()) {
reconnect();
}
client.loop();
}
void reconnect() {
while (!client.connected()) {
Serial.print("Aguardando conexão com o servidor MQTT...");
#ifdef Intel_Edison
if (client.connect("INTEL_EDISON", "teste", "teste")) {
#else
if (client.connect("ESP8266", "teste", "teste")) {
#endif
Código Arduino (ESP01 / Intel Edison)
Serial.println("Conectado!");
#ifdef Intel_Edison
client.subscribe("edison/pincmd", 1);
#else
client.subscribe("esp8266/pincmd", 1);
#endif
} else {
Serial.print("falhou, rc=");
Serial.print(client.state());
Serial.println(" tentando novamente em 5 segundos...");
delay(5000);
}
}
}
Código Arduino (ESP01 / Intel Edison)
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
for (int i=0;i<length;i++) {
Serial.print((char)payload[i]);
}
Serial.println();
#ifdef Intel_Edison
if(payload[0] == '3') digitalWrite(LED_1, HIGH);
if(payload[0] == '2') digitalWrite(LED_1, LOW);
if(payload[0] == '5') digitalWrite(LED_2, HIGH);
if(payload[0] == '4') digitalWrite(LED_2, LOW);
if(payload[0] == '7') digitalWrite(LED_3, HIGH);
if(payload[0] == '6') digitalWrite(LED_3, LOW);
Código Arduino (ESP01 / Intel Edison)
#else
if(payload[0] == '1') digitalWrite(LED_1, HIGH);
if(payload[0] == '0') digitalWrite(LED_1, LOW);
#endif
}
void conecta_Wifi() {
while (status != WL_CONNECTED) {
Serial.print("Tentativa de conexão na rede (SSID): ");
Serial.println(ssid);
status = WiFi.begin(ssid, pass);
delay(5000);
}
}
Código Arduino (ESP01 / Intel Edison)
void printWifiStatus() {
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
IPAddress ip = WiFi.localIP();
Serial.print("Endereço IP: ");
Serial.println(ip);
long rssi = WiFi.RSSI();
Serial.print("Potência do sinal (RSSI):");
Serial.print(rssi);
Serial.println(" dBm");
}
MQTT Dash
MQTT Dash
MQTT Dash
Perguntas?
Obrigado!
professor.daniel.rsousa@gmail.com

IoT arduino

  • 1.
    IoT com Arduino Conectetudo na rede! Prof. Me. Daniel Rodrigues de Sousa | professor.daniel.rsousa@gmail.com
  • 2.
    Daniel Rodrigues deSousa  Engenheiro eletricista formado pela Universidade Cruzeiro do Sul – 2001  Mestre em Ciências da Computação pela UFABC - 2016  Autor dos livros Microcontroladores ARM7 – O poder dos 32 bits, Desbravando o PIC24 – Conheça os Microcontroladores de 16 bits, Desbravando o PIC18 – Recursos Avançados, Desbravando o Desbravando o PIC18 – Ensino Didático, todos pela Editora Érica
  • 3.
    Agenda ➢ O que éIoT? ➢ Camadas de Rede IoT. ➢ Message Queuing Telemetry Transport – MQTT. ➢ Proposta de IoT com Arduino. ➢ Código. ➢ Demonstração.
  • 4.
    Internet das Coisas– Termos Pesquisados
  • 5.
    Internet das Coisas– Definição A Internet das Coisas (Internet of Things – IoT), é uma rede de objetos físicos, veículos, prédios e outros que possuem tecnologia embarcada, sensores e conexão com rede capaz de coletar e transmitir dados. IoT nada mais é que uma extensão da Internet atual, que proporciona aos objetos do dia-a-dia (quaisquer que sejam), mas com capacidade computacional e de comunicação, se conectarem à Internet. Permite que os próprios objetos sejam acessados como provedores de serviços. Estas novas habilidades, dos objetos comuns, geram um grande número de oportunidades tanto no âmbito acadêmico quanto no industrial.
  • 6.
    Internet das Coisas– Definição 1990 - John Romkey e Simon Hackett apresentou o primeiro dispositivo conectado a rede: uma torradeira elétrica
  • 7.
    Internet das Coisas- Aplicações
  • 8.
    Arquitetura Básica dosDispositivos IoT
  • 9.
  • 10.
  • 11.
    Fonte de Energia: ➢Baterias ➢Pilhas ➢Fonte ➢Células Fotoelétricas ➢GeradoresEólicos ➢Redes de comuni- cação Arquitetura Básica dos Dispositivos IoT
  • 12.
  • 13.
    Modelo de Conectividadede Dispositivos IoT
  • 14.
    Protocolos e Camadaspara IoT Camadas Internet TCP/IP IP IoT Aplicação HTTP, HTTPS, FTP, SSH, etc... CoAP, MQTT Transporte TCP, UDP UDP Internet IPv4, IPv6 6LoWPAN Rede IEEE 803.2 Ethernet / 802.11 Wi-Fi IEEE 802.11, IEEE 802.15
  • 15.
    Message Queuing TelemetryTransport - MQTT
  • 16.
    Message Queuing TelemetryTransport - MQTT
  • 17.
    Proposta de umSistema IoT com MQTT Broker MQTT Subscribe PublishSubscriber/ Publisher Subscriber/ Publisher Subscriber/ Publisher
  • 18.
    Proposta de umSistema IoT com MQTT Broker MQTT Subscribe PublishSubscriber/ Publisher Subscriber/ Publisher Subscriber/ Publisher Raspbian Jessie + Eclipse Mosquitto
  • 19.
    Proposta de umSistema IoT com MQTT Broker MQTT Subscribe PublishSubscriber/ Publisher Subscriber/ Publisher Subscriber/ Publisher Sketch Arduino + PubSubClient.h
  • 20.
    Proposta de umSistema IoT com MQTT Broker MQTT Subscribe PublishSubscriber/ Publisher Subscriber/ Publisher Subscriber/ Publisher Sketch Arduino + PubSubClient.h
  • 21.
    Proposta de umSistema IoT com MQTT Broker MQTT Subscribe PublishSubscriber/ Publisher Subscriber/ Publisher Subscriber/ Publisher App MQTT Dash
  • 22.
  • 23.
  • 24.
  • 25.
    Intel Galileo /Galileo Gen 2
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
    Código Arduino (ESP01/ Intel Edison) #define Intel_Edison #ifdef Intel_Edison #include <WiFi.h> #else #include <ESP8266WiFi.h> #endif #include <PubSubClient.h> char ssid[] = "Teste"; // Rede char pass[] = "0123456789"; // Senha da Rede int keyIndex = 0; // númeso indexador da rede (para redes WEP)
  • 33.
    Código Arduino (ESP01/ Intel Edison) int status = WL_IDLE_STATUS; #ifdef Intel_Edison #define LED_1 2 #define LED_2 3 #define LED_3 4 #else #define LED_1 2 #endif bool flag_debug = false; IPAddress ip; IPAddress server(192, 168, 1, 182);
  • 34.
    Código Arduino (ESP01/ Intel Edison) WiFiClient ethClient; PubSubClient client(ethClient); void setup() { Serial.begin(115200); Serial.setTimeout(10); pinMode(LED_1, OUTPUT); digitalWrite(LED_1, LOW); #ifdef Intel_Edison pinMode(LED_2, OUTPUT); digitalWrite(LED_2, LOW); pinMode(LED_3, OUTPUT); digitalWrite(LED_3, LOW);
  • 35.
    Código Arduino (ESP01/ Intel Edison) #endif conecta_Wifi(); Serial.println("Conectado na rede Wifi!"); printWifiStatus(); ip = WiFi.localIP(); client.setServer(server, 1883); client.setCallback(callback); }
  • 36.
    Código Arduino (ESP01/ Intel Edison) void loop() { if (!client.connected()) { reconnect(); } client.loop(); } void reconnect() { while (!client.connected()) { Serial.print("Aguardando conexão com o servidor MQTT..."); #ifdef Intel_Edison if (client.connect("INTEL_EDISON", "teste", "teste")) { #else if (client.connect("ESP8266", "teste", "teste")) { #endif
  • 37.
    Código Arduino (ESP01/ Intel Edison) Serial.println("Conectado!"); #ifdef Intel_Edison client.subscribe("edison/pincmd", 1); #else client.subscribe("esp8266/pincmd", 1); #endif } else { Serial.print("falhou, rc="); Serial.print(client.state()); Serial.println(" tentando novamente em 5 segundos..."); delay(5000); } } }
  • 38.
    Código Arduino (ESP01/ Intel Edison) void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); for (int i=0;i<length;i++) { Serial.print((char)payload[i]); } Serial.println(); #ifdef Intel_Edison if(payload[0] == '3') digitalWrite(LED_1, HIGH); if(payload[0] == '2') digitalWrite(LED_1, LOW); if(payload[0] == '5') digitalWrite(LED_2, HIGH); if(payload[0] == '4') digitalWrite(LED_2, LOW); if(payload[0] == '7') digitalWrite(LED_3, HIGH); if(payload[0] == '6') digitalWrite(LED_3, LOW);
  • 39.
    Código Arduino (ESP01/ Intel Edison) #else if(payload[0] == '1') digitalWrite(LED_1, HIGH); if(payload[0] == '0') digitalWrite(LED_1, LOW); #endif } void conecta_Wifi() { while (status != WL_CONNECTED) { Serial.print("Tentativa de conexão na rede (SSID): "); Serial.println(ssid); status = WiFi.begin(ssid, pass); delay(5000); } }
  • 40.
    Código Arduino (ESP01/ Intel Edison) void printWifiStatus() { Serial.print("SSID: "); Serial.println(WiFi.SSID()); IPAddress ip = WiFi.localIP(); Serial.print("Endereço IP: "); Serial.println(ip); long rssi = WiFi.RSSI(); Serial.print("Potência do sinal (RSSI):"); Serial.print(rssi); Serial.println(" dBm"); }
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.