Mozilla WebThings

IoT e Mozilla WebThings na Fatec Taquaritinga

Nos dias 22 e 23 de Abril aconteceu na Fatec Taquaritinga na cidade de Taquaritinga – SP três sessões da palestra “Conhecendo IoT e o WebThings da Mozilla”.

Nesse post vou detalhar um pouco como foi a atividade e todas as etapas da preparação do conteúdo que foi apresentado aos alunos!

Pré-evento

Antes da apresentação foi necessário preparar o Gateway e um dispositivo IoT para demonstrar o funcionamento dele. Para agilizar esse processo foi utilizado o Raspberry Pi + Python para a construção de um led que pode ser acesso via Gateway WebThings!

Para quem ainda não conhece o projeto WebThings Gateway da Mozilla é um Gateway para IoT desenvolvido com o propósito de facilitar a vida de quem deseja conectar seus dispositivos a Web, ele garante segurança, privacidade e praticidade para seus projetos de IoT ou de WoT (Web of Things, maiores informações sobre esse termo aqui).

O primeiro passo é a configuração do Gateway, para essa instalação utilizei meu computador que está com o Linux Mint, segui o passo a passo apresentado na página do Github. Dessa forma acredito que fique mais fácil demonstrar o funcionamento do Gateway em uma talk por exemplo (qualquer dúvida no passo a passo deixa um comentário aqui no blog).

Com o Gateway instalado foi a hora de configurar o Raspberry Pi para funcionar com o led, eu utilizo o Raspbian nele para facilitar o processo (uma dica: eu configurei o Raspberry Pi e o meu Notebook para conectarem na roteador do meu celular com Android, isso facilitou pois o evento não tinha um Wifi que poderia ser usado para esse propósito).

Esse é o esquema utilizado (Raspberry Pi 3 Model B):

Esquema Led - Raspberry Pi

No esquema acima estamos utilizando o pino 11 (BCM 17) para o controle do led.

Raspberry Pi Led

Para o código Python segui a explicação encontrada aqui, essa foi a base para a construção do código que utilizei no meu led. Esse foi o código Python utilizado no projeto:

from __future__ import division
from webthing import (Action, Event, Property, SingleThing, Thing, Value,
                      WebThingServer)
import logging
import time
import uuid
import RPi.GPIO as GPIO

// Configuring the GPIO Physical pin 11
GPIO.setmode (GPIO.BOARD)
GPIO.setup (11,GPIO.OUT)

def switch_led(v):
    // Send signal to Physical pin 11 (BCM 17)
    GPIO.output(11,v)

def make_thing():
    thing = Thing('Raspberry Led', ['OnOffSwitch', 'Light'], 'A web connected led')

    thing.add_property(
        Property(thing,
                 'on',
                 Value(True,lambda v: switch_led(v)),
                 metadata={
                     '@type': 'OnOffProperty',
                     'title': 'On/Off',
                     'type': 'boolean',
                     'description': 'Whether the lamp is turned on',
                 }))
    
    return thing


def run_server():
    thing = make_thing()

    # If adding more than one thing, use MultipleThings() with a name.
    # In the single thing case, the thing's name will be broadcast.
    server = WebThingServer(SingleThing(thing), port=8888)
    try:
        logging.info('starting the server')
        server.start()
    except KeyboardInterrupt:
        logging.info('stopping the server')
        server.stop()
        logging.info('done')


if __name__ == '__main__':
    logging.basicConfig(
        level=10,
        format="%(asctime)s %(filename)s:%(lineno)s %(levelname)s %(message)s"
    )
    run_server()


Para facilitar utilizei esse script .sh aqui para iniciar o projeto:

#!/bin/bash

dir=$(readlink -f $(dirname "$0"))
cd "${dir}"

system_option=""
if [ -f /etc/debian_version ]; then
    system_option="--system"
fi

if [ ! -d lib ]; then
    pip3 install $system_option --install-option="--prefix=" --target lib -r requirements.txt
fi

PYTHONPATH=./lib python3 single-thing.py

Esse script faz a leitura dos requisitos básicos e verifica se é necessário instalar algo antes de iniciar o código Python. O arquivo requirements.txt tem o seguinte conteúdo:

webthing>=0.11.0

O processo para inicializar ficou bem simples, ligar o Raspberry Pi, acionar o script .sh e aguardar o server executar. Na sequência já é possível adicionar o Led ao Gateway através do botão adicionar.

Adicionando o Led (1)

Adicionando o Led (2)

Durante o evento

As palestras correram tranquilamente, durante as apresentações as principais perguntas eram relacionadas a privacidade e segurança desse tipo de tecnologia, talvez pelo público ser formado por estudantes de graduação esse seja um tema importante para eles ao escolher uma determinada tecnologia para adotar.

Alguns alunos questionaram se poderiam adaptar um projeto já construído com Arduino e então eu apresentei os links para a documentação do Framework. A apresentação seguiu o seguinte flux: Introdução, IoT, Mozilla + IoT, WoT e finalmente a demonstração do gateway, a explicação da instalação e configuração dele e as etapas para a criação do dispositivo de IoT usando o Raspberry Pi e o led.

Você pode conferir aqui os slides da palestra (apenas em pt-BR por enquanto).

Foto da Palestra

Pós-evento

Os próximos passos serão alterar o Led para uma lâmpada de verdade usando um relé e o Raspberry Pi, isso com certeza irá facilitar a demonstração (o led tem um brilho muito pequeno para espaços grandes como foi o auditório da palestra).

Outro ponto interessante e que pretendo implementar é deixar configurado para que o script consiga iniciar automaticamente ao ligar o Raspberry Pi e talvez realizar a solda do projeto montado (relé, fios e lâmpada) para facilitar o transporte e agilizar a conexão com o Raspberry Pi em futuras apresentações.

Enviei essa talk para mais alguns eventos nos próximos meses, assim que tiver novidades posto aqui para vocês! 😀

Até a próxima!

Publicado por

Felipe Do E. Santo

Professor, Mozilla Tech Speaker, Mozilla Rep, Desenvolvedor Web e Gamer nas horas vagas.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.