Atualização automática de software por dispositivo IoT através de protocolo FTP – IOT Parte 44

No tutorial anterior, foi discutido o protocolo FTP e a transferência de arquivos entre um cliente e um servidor. O protocolo FTP pode ser realmente útil em muitas aplicações IoT. Muitos dispositivos IOT são instalados em locais como usinas nucleares, redes elétricas e outras instalações industriais onde esses tipos de dispositivos podem apresentar alguns bugs e precisar de atualizações de software de aplicação para corrigi-los. Em protocolos IoT padrão como MQTT, CoAP, etc., é difícil atualizar e reinstalar software de aplicação porque a maioria dos protocolos IoT são projetados para comunicação IoT entre dispositivos e rede, mas não para tarefas como atualizações de aplicativos. A atualização do aplicativo em um dispositivo IoT só é possível através da pilha TCP/IP. O protocolo FTP é o protocolo projetado especificamente sobre a pilha TCP/IP para transferência de arquivos entre um cliente e um servidor. Portanto, ele pode ser usado por um dispositivo IoT para baixar software de aplicativo atualizado e reinstalá-lo após o download.
Neste projeto, um Raspberry Pi é usado como um dispositivo IoT que executa um aplicativo python simples para piscar um LED. Portanto, o dispositivo IoT projetado neste projeto é um Raspberry Pi com interface com um LED. Um outro aplicativo python também continua em execução na placa filha, que continua procurando uma atualização do código do LED piscando de um servidor FTP. O aplicativo de busca de atualização se conecta ao servidor FTP e rastreia o número da versão do código de LED piscando disponível no servidor FTP. Se o número da versão do código do LED piscando for alterado, o código de busca de atualização baixa o código atualizado e o reinstala no Raspberry Pi. O processo de atualização ocorre automaticamente e não requer nenhuma intervenção humana. Portanto, fazer upload e download de arquivos de FTP é confiável e rápido, pois muitos aplicativos usam FTP em servidores de atualização.
Componentes necessários –
1) Framboesa Pi 3
2) LED
3) Resistor de 1KΩ
4) Fios de ligação em ponte
Software necessário –
1) SO Raspbian
2) Leafpad/GNU Nano/Python 3 IDLE (para escrever scripts python)
Diagrama de bloco –

Diagrama de blocos do cliente IoT FTP baseado em Raspberry Pi 3

Figura 1: Diagrama de blocos do cliente IoT FTP baseado em Raspberry Pi 3
Conexões de Circuito –
Um dispositivo IOT simples é projetado neste projeto. Possui um LED conectado ao Raspberry Pi 3. O dispositivo é projetado através da montagem dos seguintes componentes.
Framboesa Pi 3 – Raspberry Pi 3 é o Raspberry Pi de terceira geração. É uma maravilha em miniatura, reunindo um poder computacional considerável em um espaço não maior que um cartão de crédito. O processador central do sistema Raspberry Pi é um sistema em chip (SoC) Broadcom BCM2837 que abriga um processador Quad Core ARM Cortex-A53 de 1,2 GHz. A grande maioria dos componentes do sistema, incluindo suas unidades centrais e de processamento gráfico, juntamente com o hardware de áudio e comunicação, são construídos nesse único componente, juntamente com o chip de memória LPDDR2 de 1 GB no centro da placa. Não é apenas esse design de SoC que torna o BCM2837 diferente do processador encontrado em um desktop ou laptop típico; no entanto, ele também usa uma arquitetura de conjunto de instruções (ISA) diferente, conhecida como ARM.
O Pi vem equipado com soquete Ethernet 10/100 BaseT integrado, porta HDMI e RCA composta para vídeo, conector de saída de áudio de 3,5 mm, interface serial de câmera MIPI de 15 pinos (CSI-2), interface serial de exibição, Bluetooth 4.1, 802.11 b/g/n Wireless LAN, Micro SDIO para cartão Micro SD, 4 conectores USB 2.0, conector de 40 pinos contendo 27 pinos GPIO e soquete Micro USB para fonte de alimentação.
O Raspberry Pi é um computador de placa única projetado para executar um sistema operacional chamado GNU/Linux Raspbian. Doravante referido simplesmente como Linux. Ao contrário do Windows ou OS X, o Linux é de código aberto, portanto é possível baixar o código-fonte de todo o sistema operacional e fazer as alterações desejadas. O Raspberry Pi 3 também pode executar o Windows 10 IoT e muitos outros sistemas operacionais incorporados, muitos dos quais são derivados do Linux. O sistema operacional deve ser carregado em um cartão MicroSD e inicializado a partir dele. Com poderosos recursos de computação, grande número de interfaces multimídia e pinos GPIO, Raspberry Pi 3 é uma escolha adequada para executar um projeto complexo de IoT ou Embedded orientado a software que requer poder de computação suficiente, bem como conectividade de sensores em grande escala. Com Bluetooth e Wi-Fi integrados, este Pi de 3ª geração pode ser facilmente implantado em uma rede IoT. As principais especificações do Raspberry Pi 3 estão resumidas na tabela a seguir –
Tabela de listagem de especificações técnicas do Raspberry Pi 3
Figura 2: Tabela listando as especificações técnicas do Raspberry Pi 3
O cabeçalho de 40 pinos no Raspberry Pi 3 tem a seguinte configuração de pinos –
Tabela de listagem de configuração de pinos do cabeçalho de 40 pinos do Raspberry Pi
Fig. 3: Tabela listando a configuração dos pinos do cabeçalho de 40 pinos do Raspberry Pi
Tabela de listagem de configuração de pinos do cabeçalho de 40 pinos do Raspberry Pi
Fig. 4: Tabela listando a configuração dos pinos do cabeçalho de 40 pinos do Raspberry Pi
Neste projeto, um LED faz interface com o pino GPIO18 do Raspberry Pi. A placa é alimentada por um adaptador USB.
LIDERADO – Um LED está conectado ao GPIO18 do Raspberry Pi. Seu ânodo está conectado ao pino Raspberry Pi e o cátodo está conectado ao terra. O LED é conectado ao Pi por meio de um resistor pull-up de 1K ohm em série.
Fonte de energia – A fonte de alimentação está conectada ao Raspberry Pi. O Pi deve ser alimentado por um adaptador de 5 V com saída de corrente de 2,5 A. O adaptador pode ser conectado na tomada Micro USB.
Como funciona o circuito –
O dispositivo IoT projetado aqui é simplesmente um Raspberry Pi 3 controlando um LED. Para controlar o LED e manter o Pi conectado a um servidor FTP, dois scripts python separados precisam ser executados na placa filha. Um script python controla o LED piscando e outro script python consegue atualizar automaticamente o script do LED piscando. Primeiro de tudo, o Raspberry Pi precisa ser carregado com um sistema operacional. Aqui está instalado o sistema operacional oficial do Raspberry Pi – Linux Raspbian. Durante a instalação do sistema operacional, o Raspberry Pi deve ser conectado a um monitor usando um cabo HDMI e um teclado e mouse através de portas USB.
Para instalar o sistema operacional Raspbian no cartão MicroSD, primeiro baixe a imagem mais recente do sistema operacional Raspbian no site Raspberry Pi no link a seguir –
Sistema Operacional Raspbian
Copie a imagem do sistema operacional Raspbian mais recente no cartão MicroSD. Se o cartão MicroSD usado tiver 32 GB ou menos, ele deverá ser formatado para FAT32 (sistema de arquivos) antes de copiar a imagem ou se o cartão MicroSD tiver mais de 32 GB, ele deverá ser formatado para exFAT antes de copiar a imagem. Extraia o Zip do sistema operacional e copie-o para o cartão MicroSD. A imagem pode ser gravada no cartão conectando-o a um laptop ou PC usando um leitor de cartão MicroSD. Após copiar a imagem extraída, insira o cartão no slot MicroSD conforme mostrado abaixo –
Imagem típica do slot para cartão MicroSD Raspberry Pi 3
Fig. 5: Imagem típica do slot para cartão MicroSD Raspberry Pi 3
Conecte o Raspberry Pi a um monitor usando um cabo HDMI, um teclado e um mouse. Ligue a placa conectando-a a um adaptador de energia. O LED vermelho na placa começará a piscar e o sistema operacional começará a inicializar a partir do cartão MicroSD. O processo de inicialização será exibido no monitor e assim que a inicialização for concluída, o LED verde acenderá no Raspberry Pi. Após instalar com sucesso o Raspbian OS no Raspberry Pi, é recomendado realizar a atualização do software. Isso pode ser feito executando os seguintes comandos do Linux no Terminal Linux –
$ sudo apt-get atualização
$ sudo apt-get atualização
Depois de instalar o Raspbian, é hora de escrever e executar os scripts python no Raspbian. Um script python pode ser escrito em Raspbian usando um editor de texto como Leafpad ou GNU Nano. O script python também pode ser escrito usando o IDE python padrão, como Python 2 IDLE ou Python 3 IDLE. Abra o Python 3 IDLE navegando através de Menu -> Programação -> Python 3 IDLE. Uma janela chamada Python 3.4.2 Shell será aberta. Escreva os scripts python e salve-os em um diretório.
O script python escrito para este projeto deve ser executado na inicialização quando o Pi 3 estiver ligado. O script executa um loop infinito para que nunca termine. Existem alguns métodos pelos quais o Raspberry Pi pode ser configurado para executar um script python na inicialização. Qualquer um dos seguintes métodos pode ser usado –
1) Editando rc.local –
Os comandos podem ser adicionados ao arquivo /etc/rc.local para executar um programa ou comando quando o Raspberry Pi inicializar. Isso é especialmente útil se o Pi precisar ser conectado à energia sem cabeça e executar um programa sem configuração ou inicialização manual. O arquivo deve ser editado com root executando os seguintes comandos no Terminal Linux –
sudo nano /etc/rc.local
Agora adicione comandos para executar o script python usando o caminho completo do arquivo e adicione um e comercial no final do comando para que o script seja executado em um processo separado e a inicialização possa continuar. O seguinte comando deve ser adicionado onde os scripts python são salvos como FTP.py e CODE.py-
sudo python /home/pi/FTP.py &
saída 0
O comando deve ser adicionado logo antes da linha exit 0 no arquivo rc.local.
2) Editando .bashrc –
O .bashrc é um arquivo oculto na pasta inicial que contém opções de configuração do usuário. Abra o arquivo .bshrc executando os seguintes comandos no terminal Linux –
sudo nano /home/pi/.bashrc
Adicione as seguintes linhas após a última linha do arquivo –
echo Executando na inicialização
sudo python /home/pi/FTP.py
3) Adicionando script ao diretório init.d –
O diretório init.d contém os scripts que são iniciados durante o processo de inicialização (além disso, todos os programas aqui são executados quando o Pi é desligado ou reinicializado). Adicione o script a ser executado na inicialização ao diretório init.d usando os seguintes comandos –
sudo cp /home/pi/securitysystem.py /etc/init.d/
Vá para o diretório init e abra o script python executando os seguintes comandos –
cd /etc/init.d
sudo nano FTP.py
Adicione as seguintes linhas ao script python para torná-lo um Linux Standard Base (LSB) –
# /etc/init.d/sample.py
### INFORMAÇÕES DE INÍCIO
# Fornece: sample.py
# Início obrigatório: $remote_fs $syslog
# Parada obrigatória: $remote_fs $syslog
# Início padrão: 2 3 4 5
# Parada padrão: 0 1 6
# Breve descrição: Iniciar o daemon no momento da inicialização
# Descrição: Habilita o serviço fornecido pelo daemon.
### FIM INFORMAÇÃO DE INÍCIO
Torne o script python no diretório init executável alterando sua permissão executando o seguinte comando –
sudo chmod +x FTP.py
Em seguida, execute o seguinte comando –
padrões sudo update-rc.d FTP.py
Em seguida, reinicie o Pi executando o seguinte comando –
sudo reiniciar
Qualquer um dos métodos acima pode ser usado para executar o script python na inicialização. Agora o Pi 3 pode ser desconectado do monitor, teclado e mouse. Conecte o LED ao Raspberry Pi e ligue-o.
Agora, quando o Pi for ligado, ele executará ambos os scripts na inicialização. O script principal (CODE.py) controla o piscar do LED. Ele deixou o LED piscar por alguns segundos. O outro script (FTP.py) continua verificando o arquivo no servidor FTP para obter a versão do arquivo principal. O arquivo verificado pelo script e contendo o número da versão é denominado 'Readme.txt' e simplesmente contém o número da versão do script LED piscando como texto simples. Se o script de atualização (FTP.py) encontrar alguma alteração no arquivo de indicação de versão (Readme.txt) no servidor FTP, o que significa que o arquivo da aplicação foi alterado, (neste caso o período de piscada do led pode ter sido alterado em CODE.py carregado no servidor FTP), indica que uma nova versão do arquivo principal está disponível. Agora a versão atualizada do arquivo principal foi baixada do servidor FTP. Após o download, o script principal é reiniciado para que as alterações tenham efeito e assim a duração do piscar do led é alterada.
O FTP.py é executado na inicialização e verifica o código do aplicativo (CODE.py) do servidor FTP. O próprio FTP.py consegue baixar, instalar e executar o código principal, ou seja, CODE.py.
Guia de programação –
Existem dois scripts python escritos que são executados na inicialização. Um dos scripts python simplesmente pisca o LED conectado ao Raspberry Pi e é salvo como CODE.py. Este script começa com a importação das bibliotecas necessárias – biblioteca RPi.GPIO para lidar com entrada e saída digital e biblioteca de tempo para atrasos. RPi.GPIO é um módulo para controlar canais Raspberry Pi GPIO. Pode haver mais de um script/circuito no GPIO do Raspberry Pi. Como resultado disso, se o RPi.GPIO detectar que um pino foi configurado para algo diferente do padrão (entrada), ele poderá emitir um aviso quando o Pi tentar configurar o script. Para desabilitar esses avisos, o argumento falso é passado para o método setwarning . Uma variável é inicializada e definida como 24. O sistema de numeração GPIO é definido como BCM, que se refere aos números de canal no Broadcom SoC. O canal BCM número 24 é configurado como saída GPIO usando o método setup e é definido como LOW usando o método output . Um loop infinito é executado no qual a saída GPIO é definida como HIGH e LOW alternativamente usando o método output e o atraso de tempo é fornecido usando o método sleep do módulo de tempo que aceita o intervalo de atraso como parâmetro em milissegundos.
O segundo arquivo (FTP.py) é o script de atualização. O arquivo do aplicativo pode ser qualquer arquivo de script que neste caso é CODE.py. O script de atualização é dividido em quatro partes –
1. Configurando servidor FTP
2. Conectando ao servidor FTP
3. Baixando o arquivo de versão e comparando
4. Baixando o arquivo do aplicativo e reiniciando o aplicativo
1. Servidor de configuração: O servidor FTP deve conter dois arquivos, readme.txt (que contém as informações da versão) e code.py (contendo o arquivo de código do aplicativo principal). Qualquer servidor FTP aberto como www.biz.nf pode ser usado para hospedagem na web. Crie uma conta lá e faça upload desses dois arquivos.
2. Conectando ao servidor FTP: Para conectar-se ao servidor FTP, uma biblioteca python que suporta comandos FTP “ftplib” é importada. Deve ser importado para o início do script de atualização.
importar ftplib como ftp
Para conectar-se ao servidor FTP, a conexão é iniciada em uma variável de sessão. O endereço do servidor e seu nome de usuário e senha são fornecidos para a variável.
sessão = ftp.FTP('192.168.1.100′,'iot_user','123123123′)
3. Baixando o arquivo de versão e comparando: O arquivo leia-me no servidor contém informações sobre a versão atual do código do aplicativo. Também no script de atualização, a versão atual é definida com uma variável.
c_versão = “1”
O arquivo leia-me do servidor FTP é baixado e armazenado em uma variável “versão”. O arquivo é aberto e lido para detectar o número da versão.
com open('README.txt', 'r') como meuarquivo:
versão=meuarquivo.read .replace('n', ”)
Após o armazenamento, as variáveis ​​de versão são comparadas e caso sejam encontradas alterações, é iniciado o processo de download do código da Aplicação do servidor FTP.
if (versão! = c_versão):
versão c_global
c_versão = versão
4. Baixando o arquivo do aplicativo e reiniciando o aplicativo: Após a comparação entre a versão e a detecção da alteração de versão, é iniciado o download do Code.py atualizado do servidor FTP.
session.retrbinary('RETR CODE.py', open('CODE.py', 'wb').write)
O arquivo é recuperado e armazenado com o mesmo nome do arquivo principal do aplicativo. Primeiro, o aplicativo em execução é eliminado.
check_kill_process (“CODE.py”)
Em seguida, um thread separado é iniciado para reiniciar o aplicativo.
iniciar = 'sudo python CODE.py'
proc = subprocess.Popen(iniciar, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
Então, é assim que o protocolo FTP pode ser usado em um aplicativo IOT para atualização automática de aplicativos. Confira os scripts python na seção de código e experimente-os. No próximo tutorial, aprenda sobre o protocolo SFTP. SFTP é uma variante segura do protocolo FTP.

Código fonte do projeto

###



//Program to 

import ftplib as ftp

import time

import os,signal

import subprocess

version = ""

c_version = "1"

session = ftp.FTP('192.168.1.100','iot_user','123123123')


#stop = 'sudo kill $(ps aux   grep CODE.py   awk '{{print $2}}')'

start="sudo python CODE.py"



def update : 

#ftp.cwd('debian')

#session.retrlines('LIST') 

session.retrbinary('RETR README.txt', open('README.txt', 'wb').write)

with open('README.txt', 'r') as myfile:

version=myfile.read .replace('n', '')


if(version != c_version):

global c_version

session.retrbinary('RETR CODE.py', open('CODE.py', 'wb').write)

c_version = version

time.sleep(1)

check_kill_process("CODE.py")

print "STOP pass"

time.sleep(1)

proc = subprocess.Popen(start, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)

print "START Pass"

time.sleep(3)

print "UPDATED!"

else:

time.sleep(5)

print "NO UPDATES"


def check_kill_process(pstring):

    for line in os.popen("ps ax   grep " + pstring + "   grep -v grep"):

        fields = line.split 

        pid = fields(0)

        os.kill(int(pid), signal.SIGKILL)


while True:

try:

update 

except Exception as e:

session.quit 

print e 


###

Diagramas de circuito

Diagrama de circuito-Raspberry-Pi-3-based-IoT-FTP-Client

Conteúdo Relacionado

Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.