Programação
Geral
no. usp, nome, frquencia, nota final
11453692 Alejandro Enrique Noblecilla Mejia 100 9.0
8041060 Andrei Kenji Tsuda 100 9.0
11281245 Augusto Cesar Magalhaes Coutinho 100 9.0
10378081 Caio Filipe Escanferla Silva 100 9.0
10278531 Eduarda Wiltiner Reis Santana 100 9.0
10773850 Felipe Albuquerque Montezi 100 9.5
10751831 Gabriela Simoes Kind 100 9.0
10770392 Giulia Duo Cardella 100 9.0
9348794 Henrique Cleves de Oliveira Carmo 100 9.0
11453890 Jaime Nobre Sainz 100 9.0
11453733 Leonardo Galgani 100 9.0
11262091 Leonardo Martins Pires 100 9.0
10333567 Luis Eduardo Farias Sales Nobrega 100 9.0
10333608 Luis Estevao Windisch Olenscki 100 9.0
10770603 Luiz Fernando Ferreira da Silva 100 9.0
9345575 Maicon Roberto Daltrozo 100 9.5
10773606 Marcelo Augusto Gazola Paiva 100 9.5
9345860 Marco Enrique dos Santos Abensur 100 9.0
11027810 Ramon Andrade Sousa Carvalho 100 9.5Aulas: 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- utilizar a rede WIFI da disciplina: a senha e password serão entregues aos alunos
- utilizar a rede POLISEMFIO. Pode ocorrer um erro no acesso à pagina de entrada. Nesse caso, tente o endereço 1.1.1.1
- utilizar a rede EDUROAM - deve-se configurar manualmente seguindo os procedimentos da página https://medium.com/@celikemirhan/how-can-you-connect-eduroam-wi-fi-with-raspberry-pi-8f704e6fa7f6
- utilizar uma solução em que o Raspberry-Pi seja configurado na partida na para entrar como Access Point https://www.raspberrypi.org/forums/viewtopic.php?t=204833
Materiais de Apolo
1) Freboard e dweet.io
2) Grafana
3)NODE-RED
http://inf.ufes.br/~zegonc/material/Redes%20de%20Sensores%20sem%20Fio/Minicurso%20Node-RED.pd
4)RASPBERRY-PI
5) Assistente Domotico com Raspberry Pi e Bluemix
6) MQTT
https://1sheeld.com/mqtt-protocol/
http://www.steves-internet-guide.com/mqtt/
https://www.ibm.com/developerworks/br/library/iot-mqtt-why-good-for-iot/index.html
Os alunos devem subir o(s) arquivo(s) referente a primeira avaliacao:
-mostrar como foi feita a implementacao do sistema IoT com o smartphone como sensor conectado ao dweet.io/freeboard.
-passo-a-passo da implementacao
-demosntracao do sistema funcional
-idem, smarthone+IBM Cloud (bluemix IoT e IBM Node-Red)
atencao:
os alunos devem entregar em grupo de no maximo 4 (quatro) alunos. A entrega pode mestrar arquivos power-point narrados (com voz) e screen-cast. Pode-se tambem utilizar camera de video na demosntracao do sistema funcional
DATA MAXIMA DE ENTREGA - 23 DE OUTUBRO, 23H59M
Upload da 2a. Aavaliacao (arquivo zip)
-documento pdf
-materiais adicionais
em caso de entrega de material de grande tamanho, recomenda-se o envio de um link para um DRIVE na Nuvem.
Tópico 1
Aula-01 Introdução à Disciplina, Apresentação Geral de Internet das Coisas (IoT) e Sistemas Embarcados para IoT.
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.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.
Artigo sobre o ZAMIA- Speech Recognition with Raspberry PI - pag. 51
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.
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
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
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 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
-DHT11 pinout
-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.
os alunos devem entregar um documento contendo
titulo do Projeto
integrantes da equipe (nome e numero USP)
breve descrição do Projeto: contexto, problema a ser resolvido, solução almejada, metodologia.