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.

Attachments

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