Introduction: SHIOT
Este projeto foi desenvolvido para um sistema de iluminação via Dweet ,e foi utilizado o hardware Dragonborad 410C com uma versão linux linaro instalado .
E para o desenvolvimento do aplicativo para o smartphone foi utilizado o ionic , e o IDE Visual studio Code.
Step 1: Step 1 : Materiais Uitilizados
1 x Dragonboard 410C
1 x linker Mezzanine
1 x modulo led
1 x modulo de temperatura
1 x modulo de luminosidade LDR
1 x modulo touch sensor
2 x modulos rele
1 x teclado usb
1 x mouse usb
1 x monitor Hdmi
conexão com a internet
resistor de 1k Ohms para adaptação do led
Step 2: Step 2 : Montagem
a) Plugue o Linker Mezzanine na placa da Dragonboard 410C
b) Plugue o modulo de temperatura no conector do ADC2 da mezzanine
c) Plugue o modulo de sensor de luminosidade no conector do ADC1 da mezzanine
d) Plugue o modulo de sensor toque no conector do D1 da mezzanine
e) Plugue o modulo de rele no conector do D2 da mezzanine
f)Plugue o modulo Led no conector do D3 da mezzanine
g)Plugue o modulo de rele no conector do D4 da mezzanine
h)Plugue o monitor no conector HDMI da placa Dragonboard 410C
i) Plugue o teclado USB na placa Dragonboard 410C
j) Plugue o mouse USB na placa Dragonboard 410C
l) Plugue a fonte de alimentação na placa Dragonboard 410C
OBS 1: Devido ao modulo LED ter apenas um resistor de 82 Ohms , interfere na medição do sensor de temperatura causando valores negativos quando é acionado, senso necessário a utilização de um resistor de pelos menos de 1k Ohms conforme figura .
OBS 2: Devido ao kit da mezzanine possuir apenas um modulo rele, foi necessário adaptador um modulo rele generico, utilizado no conector D4 da mezzanine , interligando cabo VCC no VCC, GND no GND , e o de sinal no D_G da mezzanine
Step 3: Step 3 : Codigo Python
#importação das bibliotecas spidev e time
import spidev
import time
#importação parcial das bibliotecas
from libsoc import gpio
from gpio_96boards import GPIO
from dweet import Dweet
# definição das porta analogica , o sensor de luminosidade e de temperatura serão definidas por endereçamento.
GPIO_CS = GPIO.gpio_id('GPIO_CS')
# definição das portas digitais
BUTTON = GPIO.gpio_id('GPIO_A')
RELE = GPIO.gpio_id('GPIO_C')
LED = GPIO.gpio_id('GPIO_E')
RELE2 = GPIO.gpio_id('GPIO_G')
#configurações das GPIOS se IN ou OUT
pins = ((GPIO_CS, 'out'), (BUTTON, 'in'), (RELE, 'out'), (LED, 'out'),(RELE2, 'out'),)
#configurações das portas analagicas
spi = spidev.SpiDev()
spi.open(0,0)
spi.max_speed_hz = 10000
spi.mode = 0b00
spi.bits_per_word = 8
system_status = 1
dweet = Dweet()
#configurações do bloco de comando LED e RELE
def readDigital(gpio):
digital = [0,0]
digital[0] = gpio.digital_read(LED)
digital[1] = gpio.digital_read(RELE)
return digital
def writeDigital(gpio, digital):
write = digital
gpio.digital_write(LED, write[0])
gpio.digital_write(RELE, write[1])
return digital
#configuração do bloco para o touch, para o sistema ou ligar o sistema
def detectaButton(gpio):
global system_status
status = gpio.digital_read(BUTTON)
if status == 1:
if system_status == 0:
system_status = 1
sis_status = "Ligado "
print ("Estado do Sistema %s" %sis_status)
else:
system_status = 0
sis_status = "Desligado "
print ("Estado do Sistema %s" %sis_status)
dweet.dweet_by_name(name="shiot", data={"sistema":sis_status})
return system_status
#configuração do bloco para leitura da temperatura
def readTemp(gpio):
gpio.digital_write(GPIO_CS, GPIO.HIGH)
time.sleep(0.0002)
gpio.digital_write(GPIO_CS, GPIO.LOW)
r = spi.xfer2([0x01, 0xA0, 0x00])
gpio.digital_write(GPIO_CS, GPIO.HIGH)
adcout = (r[1] << 8) & 0b1100000000
adcout = adcout | (r[2] & 0xff)
adc_temp = (adcout *5.0/1023-0.5)*100
#print("Temperatura:%2.1f " %adc_temp)
return adc_temp
#configuração do bloco para leitura da luminosidade.
def readLumi(gpio):
gpio.digital_write(GPIO_CS, GPIO.HIGH)
time.sleep(0.0002)
gpio.digital_write(GPIO_CS, GPIO.LOW)
r = spi.xfer2([0x01, 0x80, 0x00])
gpio.digital_write(GPIO_CS, GPIO.HIGH)
adcout = (r[1] << 8) & 0b1100000000
adcout = adcout | (r[2] & 0xff)
return adcout
#execução dos blocos de comandos
if __name__=='__main__':
with GPIO(pins) as gpio:
while True:
digital = [0,0]
if detectaButton(gpio) == 1:
lumi = readLumi(gpio)
# verificação da luminosidade para acionamento do rele do conector D4
if lumi < 400:
gpio.digital_write(RELE2, GPIO.HIGH)
luz_status = "Ligado"
else:
gpio.digital_write(RELE2, GPIO.LOW)
luz_status = "Apagado"
#verificação no dweet para acionamento do led e/ou rele
resposta = dweet.latest_dweet(name="shiot")
digital[0] = resposta['with'][0]['content']['led']
digital[1] = resposta['with'][0]['content']['rele']
writeDigital(gpio, digital)
temp = readTemp(gpio)
digital = readDigital(gpio)
#imprime os valores de luminosidade,temperatura
print "Temp: %2.1f\nlumi: %d\nled: %d\nrele: %d\n" %(temp, lumi,digital[0], digital[1])
print ("Luz Externa:%s" %luz_status)
sis_status = "Ligado "
#envio de dados para o dweet
dweet.dweet_by_name(name="shiot", data={"led":digital[0],"rele": digital[1], "Temperatura":temp, "Luminosidade": lumi, "Luz_externa": luz_status ,"sistema":sis_status})
#tempo para cada leitura
time.sleep(5)
#devido a metodologia do dweet, deve ser configurado o dweet antes de executar o programa no python.
Step 4: Step 4 : Dweet
Em dweet.io , clique em PLAY.
Em dweets : Create or read dweets in short term cache, na aba :
POST /dweet/quietly/for/{thing}
- no parametro thing escreva shiot , conforme programa feito no python.
- em content escreva:
{"led":0, "rele":0 }
Que são os para os parametros enviados do dweet para a Dragonboard410C, sendo 0 para desligado e 1 para ligado.
e clique no botão TRY it out.
Execute o programa no terminal da Dragonboard 410C (este deve estar conectado em uma rede com internet):
sudo python smart.py
Na aba GET :
GET /get/dweets/for/{thing}
- no parametro thing escreva shiot , conforme programa feito no python.
e clique no botão TRY it out.
Em Response Body é obtido algo similar:
{
"this": "succeeded", "by": "getting", "the": "dweets", "with": [ { "thing": "shiot", "created": "2017-12-03T19:30:11.458Z", "content": { "Temperatura": 25.2688172043, "led": 0, "Luminosidade": 504, "Luz_externa": "Apagado", "sistema": "Ligado ", "rele": 0 } },
sendo "succeeded", identificando que a conexão foi feito com sucesso e são os parametros osbtidos da Dragonboard410C.
Step 5: Step 5: Ionic E Virtual Studio Code
- para criar pastas e os arquivos para necessários do app
no prompt de comando do windows:
ionic start shiot
abra o Visual Studio Code
- para construir as paginas html:
Em SRC =>pages=> Home => home.html
codigo conforme arquivo homehtml.txt
Em SRC =>pages=> Home => home.ts
codigo conforme arquivo homets.txt
- é necessario gerar o dweet.ts para comunicar corretamente HTTP e dweet
na prompt de comando na pasta do projeto :
ionic generate provider dweet
Em SRC =>providers=> dweet => dweet.ts
codigo conforme arquivo dweetts.txt
-importação para comunicação HTTP
Em SRC =>app=> app.module.ts
codigo conforme arquivo appmodulets.txt
Step 6: Step 6: Finalização
No prompt de comando da pasta do projeto :
ionic serve
Sera aberto no navegador http://localhost:8100/
Sendo gerado uma tela com Led que pode ser ligado ou desligado com uma "chave liga/desliga".
Sendo gerado uma tela com rele que pode ser ligado ou desligado com uma "chave liga/desliga".
E monitoramento de Temperatura, Iluminação, Luz externa, e Sistema.
mais detalhes do funcionamento no arquivo Dragon.pdf