Programação

  • Geral

    Aulas: Terça-feira e Quinta-feira, sala C1-10. 16:50-18:40.

    Professor: Sergio Takeo Kofuji

    As aulas terao conteudo teorico e pratico. A parte pratica usara servicos na Nuvem (IBM CLOUD, GOOGLE, AZURE, FREEBOARD, FIWARE etc.), e dispositivos como smartphone e raspberry-PI.

    No mes de Outubro os alunos devrao se agrupar em 5 grupos, para a arealizacao EM AULA do trabalho final da disciplina, que correspondera a avaliacao 3.

    Avaliacao 1: pratica com smartphone como IoT device, conectado 1) ao dweet.io+freeboard; 2) smartphone conectado ao Bluemix IoT e ao IBM Node-RED

    Avaliacao 2: pratica com TTS e STT usando o raspberry PI e diversas formas de implementacao local e na nuvem

    Avaliacao 3: implementacao de um assistente domotico com interface humano-maquina por voz


    Instalação do Raspian no raspiberry 3B

    -fazer download do arquivo img do raspibian stretch standard (nao use o lite e nem o full)

    -gravar o microSD com o BalenaEtcher

    -colocar o microSD no raspberry, conectar o teclado, mouse e conector hdmi. Ligar a fonte

    -seguir o procedimento de inicializacao - faça os updates necessários

    -instalar o node.js/nmp e o node-red usando o script do link

    -iniciar o node-red. Abrir o chromium no link http://128.0.0.1:1880

    -instalar os pallets do node red: browser-utils e watson

    -instalar o sotware corresponte ao TTS (exceto o cepstral, festival e espeak)

    -NODE-RED NO RASPBERRY (como usar os GPIOs)

    -configuração do wifi do raspberry-pi: a placa deve se autenticar numa rede WIFI com portas habilitadas para acesso aos serviços externos


    Materiais de Apolo


    1) Freboard e dweet.io


    2) Grafana

    https://grafana.com/


    3)NODE-RED

    http://inf.ufes.br/~zegonc/material/Redes%20de%20Sensores%20sem%20Fio/Minicurso%20Node-RED.pd

    https://cookbook.nodered.org


    4)RASPBERRY-PI


    5) Assistente Domotico com Raspberry Pi e Bluemix


    6) MQTT



  • Tópico 1

    Aula-01 Introdução à Disciplina, Apresentação Geral de Internet das Coisas (IoT) e Sistemas Embarcados para IoT.

  • Tópico 3

    PRÁTICA: PLATAFORMAS DE IOT DWEET E FREEBOARD

  • Tópico 4

    Aula 12/09/2019

    Assistente Domotico usando Raspberry PI e TTS


  • Tópico 6

    26/Set/2019 Assistente Domótico: Raspberry PI e Txt-to-Speech

    1) RPi Text to Speech (Speech Synthesis)

    https://elinux.org/RPi_Text_to_Speech_(Speech_Synthesis)

    2) Parte Prática

    2.1) Google Service para TTS

    2.2) Integração do Google-Service no NODE-RED

    2.3) Node-Red e TTS local






    • Tópico 7

      01/1Out/2019: Implementando Sistema Assistente Domotico com o Raspberry Pi: Speech to Text

      1) criar um serviço de STT no IBM Cloud (Watson)

      2) anote as credenciais

      3) Realize as atividades do STT Parte 1

      3.1) STT Demo: https://speech-to-text-demo.ng.bluemix.net/?_ga=2.124640525.669862313.1569945002-1069859680.1568390831&cm_mc_uid=49059241891215683908281&cm_mc_sid_50200000=44813581569944999825&cm_mc_sid_52640000=57251241569944999826

      3.2) https://cloud.ibm.com/docs/services/speech-to-text?topic=speech-to-text-gettingStarted

      4) Prática com o Node Red

      4.1) instale o json correspondente à parte 02. Verifique a configuraçao de cada nó

      4.2) teste com o microfone

      4.3) modifique o exemplo de forma a inserir novas funcionalidades, como incluir um feedback do sistema ao usuario usando o TTS visto na aula passada.

      4.4) leia a seção 5.4 da tese

      5) leia a secao sobre o ZAMIA, um STT que roda localmente no Raspberry PI.


    • Tópico 8

      3/Out/2019

      Conclusao da parte pratica da aula passada - secao 6.4 (pag. 51) da tese "Developing a voice-controlled
      home-assisting system for KTH Live-in Labs".  SHREYANS MALOO.

      -teste o sistema varias vezes com os comandos programados. Veja qual ]e a taxa de acertos, e quais sao os tipos de interpretacao erronea. Altere o programa (flow) node-red para aumentar a taxa de acertos.

      -conecte um LED a um dos pinos de saida do raspberry-PI para ver  se o prgrama funciona.

      Dica: https://thepihut.com/blogs/raspberry-pi-tutorials/27968772-turning-on-an-led-with-your-raspberry-pis-gpio-pins



      • Tópico 9

        08/1Out/2019 Assistente Domótico - stt&tts, sensor de temperatura/umidade, tocador de musica

        1. acrescentar o serviço de TTS no IBM Cloud. Anote as credenciais (API key e link)

        2. Teste o TTS IBM no Node-Red Raspberry-PI usando o modulo USB

        3. acrescente o TTS o fluxo de controle domotico com STT versao prototipo 1 da tese.

        4. verifique o funcionamento em LINGUA PORTUGUESA BRASILEIRA

        5. teste a função *TOQUE MUSICA"

        pode-se utilizar o youtube, o vlc, o aplay, o mplayer, etc. para tocar musicas armazenadas localmente ou na rede.

        pode-se tambem tocar radios.

        6. acrescente o palete do sensor DHT11 no Node-Red (node-red-contrib-dht-sensor). Configure o nó dht11 para o pino físico da figura abaixo)

        7 monte o sensor de temperatura/umidade


        protocolo de comunicacao dht11

        8. Teste o funcionamento

        • Tópico 10

          10/Out/2019 Semana de Provas 1o. e 2o. ano

          Dica sobre o Tocado dr Musica:

          exemplo de implementacao de um radio internet implementado sobre o NODE-RED

          https://flows.nodered.org/flow/8b75e690f46b339639347cb0dce63344


          • Tópico 11

            17/OUTUBRO/2019

            IMPLEMENTACAO DO  BLOCO TOCADOR DE MUSICA.

            SIGA AS  INSTRUCOES APRESENTADAS NO TOPICO 10

            MODIFIQUE O TOCADOR DE MUSICA PARA OUTRAS MODALIDADES DE TOCADOR  DE MIDIA (LISTA DE MUSICAS, ESTACOES DE RADIO, ETC.)

            MODIFIQUE O SISTEMA PARA RECEBER COMANDOS DE VOZ

            COMO OBTER LINKS PLS DE RADIO INTERNET:

            entre em: https://www.internet-radio.com/

            selecione uma modalidade de musica, por exemplo jazz

            tela de https://www.internet-radio.com/stations/jazz/


            clique em .pls e salve em algum editor do tipo notepad...

            obtenha o URL da radio internet (pls)

            BOA SORTE

            • Tópico 12

              22/10/2019

              -completar o flow diagram de play music, usando os links .pls do internet-radio

              -realizar a medição de temperatura do sensor DHT11

              -realizar a integração do raspberrypi como IoT device ao IBM Cloud Bluemix IoT

              • verifique se o palette node-red-contrib-ibm-watson-iot está instalado. Caso contrário, faça a instalação.
              • crie uma nova aba de fluxo
              • insira um nó watson iot de saída
              • conecte na entrada do nó watsion iot output um nó inject (timestamp)
              • conecte na saída do nó watson um nó debug
              • configure o nó watson, clicando duas vezes com o mouse. configure como device, e quickstart. Coloque no quickstart id o MAC address da placa de rede wireless na forma NN-NN-NN-NN-NN-NN
              • faça o deployment do Raspberry Node-Red
              • no janela de configuração do ibm watson output, clique no icone de dashboard ao lado do campo de quickstart id. Isso irá abrir a janela do ibm watson iot para operacao quickstart
              • clique no nó de injeção ou configure o nõ de injeção para gerar eventos a cada segundo.
              • veja os eventos na janela quickstart do IBM
              • modifique a configuração do no IBM Watson output para REGISTERED
                • utilize o oganization id (orgid) do IBM Cloud utilizado na sua conta
                • adote como server orgid.messaging.internetofthings.ibmcloud.com
                • preencha o token adotado na instalação do dispositivo no IBM Cloud IoT

              -implemente um display da tempertarura medida pelo DHT11 no IBM Node-Red Dashboard

              • insira um leitor de temperatura DHT11 no node-red do raspberry-pi. Envie os dados de temperatura ao IBM Watson IoT
              • abra a janela do IBM Node-Red e faça um gráfico com os dados de temperatura. Atenção - assegure que o IBM Cloud IoT está conectado com o IBM Node-Red...

              -implemente um controle de limite de temperatura no IBM Node-Red de forma a enviar um commando ao Raspberry Pi assim que a temperatura atingir 30 graus Celsius, simulando um controle elementar de controle de temperatura. Para isso voce deve utilizar um no IBM Watson input no Raspberry Node-Red. Configure o no da mesma forma que foi feito no IBM Cloud output.

              • insira um nó Watson Iot input no node-red do raspberry-pi
              • conecte com o ibm IoT
              • verifique se voce consegue mandar dados do IBM Cloud ao Raspberry Node-Red
              • agora tente enviar dados do IBM Node-Red ao Raspberry Node-Red
              • complete o exercício. Quando a temperatura atingir um limite, acione um alarme no raspberry (acenda ul LED, toque uma mensagem de voz, toque um sirene, acione um ventilador, etc). Quando a temperatura cair abaixo de um limite, desative o alarme.

              -mande alarmes via sms, twitter ou outro mecanismo ao celular do usuario

              -acrescente funções de TTS (com saida de voz pelo browser) no IBM Dashboard para interface com o usuário e teste no browser de um smartphone.

                



              • Tópico 13

                24/10/2019

                Integração Raspberry Node-Red com o IBM Node-Red

                -completar as tarefas do dia 22/10/2019

                -antes de tentar enviar a temperatura do sensor DHT11, pode-se enviar a temperatura do CPU do Raspberry, executando o comando:

                • vcgencmd measure_temp | egrep -o '[0-9]*\.[0-9]*'
                como explicado no link:


                • Tópico 14

                  29/10/2019

                  implementação de um dispositivo IoT com o ESP8266

                  iot device com o esp8266


                  • Tópico 15

                    31/10/2019

                    CLIENTE PUB/SUB NO ESP8266 NODEMCU V3

                    -INSTALAR UM CLIENTE MQTT. TESTAR COM UM MQTT BROKER

                    -CONECTAR O CLIENTE MQTT AO IOT GATEWAY (RASPBERRY-PI RODANDO O NODE-RED)



                  • Tópico 16

                    05/11/2019

                    Integração IoT Device (ESP8266) + IoT Gateway (Raspberry-PI)

                    1) complete a implementação do IoT Device MQTT Client com o ESP8266 NodeMCU V3, para ler a temperatura (sensor DHT11) e acender o buit-n LED

                    2) trocar o Mqtt broker na nuvem (HIVE) pelo MQTT Broker do Raspberry-PI (MOSCA MQTT do Node-Red). Testar o funcioanmento, lendo a temperatura e acendendo o LED se a temperatura passar um limite (dica: implemente clientes  publish e subscriber no Raspberry-Pi NOD-RED para testar 


                    Observações - leitura do sensor DHT11

                    -ESP8266: modifique o programa mqtt_esp8266 para incluir o programa DHT_ESP8111 ou o DHT11 para leitura do sensor DHT11. Verifique no programa o pino tilizado para leitura do sensor.

                    -https://circuits4you.com/2019/01/25/interfacing-dht11-with-nodemcu-example/

                    -circuito
                    circuito

                    -DHT11 pinout


                    pinagem de um modulo sensor DHT11 disponivel no mercado

                    pinagem de outros modulos DHT11

                    -esp8266 nodemcu pinout

                    https://circuits4you.com/2017/12/31/nodemcu-pinout/

                    -apos instalar a biblioteca, teste o seguinte programa para ler a temperatura e humidade com o DHT11

                    -----------------------------------------------------------CUT HERE-----------------------------------

                    /* 

                     * ESP8266 NodeMCU DHT11 - Humidity Temperature Sensor Example

                     * https://circuits4you.com

                     * 

                     * References

                     * https://circuits4you.com/2017/12/31/nodemcu-pinout/

                     * 

                     */

                     

                    #include "DHTesp.h"


                    #define DHTpin 14    //D5 of NodeMCU is GPIO14


                    DHTesp dht;


                    void setup()

                    {

                      Serial.begin(115200);

                      Serial.println();

                      Serial.println("Status\tHumidity (%)\tTemperature (C)\t(F)\tHeatIndex (C)\t(F)");

                      

                      // Autodetect is not working reliable, don't use the following line

                      // dht.setup(17);


                      // use this instead: 

                      dht.setup(DHTpin, DHTesp::DHT11); //for DHT11 Connect DHT sensor to GPIO 17

                      //dht.setup(DHTpin, DHTesp::DHT22); //for DHT22 Connect DHT sensor to GPIO 17

                    }


                    void loop()

                    {

                      delay(dht.getMinimumSamplingPeriod());


                      float humidity = dht.getHumidity();

                      float temperature = dht.getTemperature();


                      Serial.print(dht.getStatusString());

                      Serial.print("\t");

                      Serial.print(humidity, 1);

                      Serial.print("\t\t");

                      Serial.print(temperature, 1);

                      Serial.print("\t\t");

                      Serial.print(dht.toFahrenheit(temperature), 1);

                      Serial.print("\t\t");

                      Serial.print(dht.computeHeatIndex(temperature, humidity, false), 1);

                      Serial.print("\t\t");

                      Serial.println(dht.computeHeatIndex(dht.toFahrenheit(temperature), humidity, true), 1);

                    }

                    ---------------------------------------------------------------END-----------------------------------------------------------------------


                    • Tópico 17

                      07/11/2019

                      -Implementação de um sensor de temperatura e humidade e acionamento de lampada LED com o ESP8266 NODEMCU V3 com clientes MQTT PUB/SUB

                      -discussão sobre a avaliação 2 e data de entrega.

                      -codigo ESP8266 NODEMCU V3


                      ----------------------------------------------------CUT HERE--------------------------------------------------------

                      /*

                        ESP8266 MQTT DHT11


                       This sketch demonstrates the capabilities of the pubsub library in combination

                       with the ESP8266 board/library.


                       It connects to an MQTT server then:

                        - publishes DHT11 Temperature to the topic "tempPOLI" every two seconds

                        - subscribes to the topic "ledPOLI", printing out any messages

                          it receives. NB - it assumes the received payloads are strings not binary

                        - If the first character of the topic "ledPOLI" is an 1, switch ON the ESP Led,

                          else switch it off


                       It will reconnect to the server if the connection is lost using a blocking

                       reconnect function. See the 'mqtt_reconnect_nonblocking' example for how to

                       achieve the same result without blocking the main loop.


                       To install the ESP8266 board, (using Arduino 1.6.4+):

                        - Add the following 3rd party board manager under "File -> Preferences -> Additional Boards Manager URLs":

                             http://arduino.esp8266.com/stable/package_esp8266com_index.json

                        - Open the "Tools -> Board -> Board Manager" and click install for the ESP8266"

                        - Select your ESP8266 in "Tools -> Board"


                      */


                      #include <ESP8266WiFi.h>

                      #include <PubSubClient.h>

                      #include "DHTesp.h" /*STK*/


                      //builtin LED is in differente from V2!

                      #define LED_02 2


                      #define DHTpin 14    //D5 of NodeMCU is GPIO14 /*STK*/


                      // Update these with values suitable for your network.


                      const char* ssid = "-----";

                      const char* password = "------";

                      const char* mqtt_server = "broker.hivemq.com";


                      DHTesp dht; /*STK*/

                      WiFiClient espClient;

                      PubSubClient client(espClient);

                      long lastMsg = 0;

                      char msg[50];

                      int value = 0;



                      void setup_wifi() {


                        delay(10);

                        // We start by connecting to a WiFi network

                        Serial.println();

                        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("Message arrived [");

                        Serial.print(topic);

                        Serial.print("] ");

                        for (int i = 0; i < length; i++) {

                          Serial.print((char)payload[i]);

                        }

                        Serial.println();


                        // Switch on the LED if an 1 was received as first character

                        if ((char)payload[0] == '1') {

                          digitalWrite(LED_02, LOW);   // Turn the LED on (Note that LOW is the voltage level

                          // but actually the LED is on; this is because

                          // it is active low on the ESP-01)

                        } else {

                          digitalWrite(LED_02, HIGH);  // Turn the LED off by making the voltage HIGH

                        }


                      }


                      void reconnect() {

                        // Loop until we're reconnected

                        while (!client.connected()) {

                          Serial.print("Attempting MQTT connection...");

                          // Create a random client ID

                          String clientId = "ESP8266Client-";

                          clientId += String(random(0xffff), HEX);

                          // Attempt to connect

                          if (client.connect(clientId.c_str())) {

                            Serial.println("connected");

                            // Once connected, publish an announcement...

                            client.publish("tempPOLI", "hello world");

                            // ... and resubscribe

                            client.subscribe("ledPOLI");

                          } else {

                            Serial.print("failed, rc=");

                            Serial.print(client.state());

                            Serial.println(" try again in 5 seconds");

                            // Wait 5 seconds before retrying

                            delay(5000);

                          }

                        }

                      }


                      void setup() {

                        pinMode(LED_02, OUTPUT);     // Initialize the BUILTIN_LED pin as an output

                        Serial.begin(115200);

                        setup_wifi();

                        

                        dht.setup(DHTpin, DHTesp::DHT11); //for DHT11 Connect DHT sensor to GPIO 17 /*STK 07/11/2019 */

                        

                        client.setServer(mqtt_server, 1883);

                        client.setCallback(callback);

                      }


                      void loop() {


                        if (!client.connected()) {

                          reconnect();

                        }

                        client.loop();


                        long now = millis();

                        if (now - lastMsg > 2000) {


                       float humidity = dht.getHumidity();


                       float temperature = dht.getTemperature(); /* STK 07/11/2019 */

                          

                          lastMsg = now;

                          ++value;

                          snprintf (msg, 50, "Temperature %f", temperature);

                          Serial.print("Publish message: ");

                          Serial.println(msg);

                          client.publish("tempPOLI", msg);

                        }

                      }

                      ---------------------------------------END-------------------------------------



                      • Tópico 18

                        12/11/2019

                        -Sistema IoT Completo, composto por um sensor (DHT11), um IoT device (ESP8266), um IoT Gateway (Raspberry Pi), e uma plataforma de  Cloud IoT

                        -Entrega dos títulos dos Trabalhos Finais

                        -O Trabalho Final deverá ser entregue até o dia 28 de Novembro. Este prazo poderá ser extendido por uma semana em caso de sobreposição com provas. O Trabalho final deve conter: apresentação do problema a ser tratado pelo projeto, visão de alto nivel do sistema  sistema. Decomposição do sistema, descrevendo as partes constituintes e interfaces. Codigos e node-red flow diagrams.