Setup do Raspberry Pi

Nesta página vamos descrever o processo de configuração do cartão microSD a usar no Raspberry Pi (RPi). Todo esse processo já foi porém executado previamente nas placas que terá ao seu dispor, sendo contudo conveniente realizar a mudança da palavra passe de acesso. Para isso comece por aceder à placa por SSH (tal como foi aqui descrito) com o utilizador pi e a palavra passe a ser facultada na aula, e em seguida proceda à alteração da palavra passe usando o comando:

passwd

Após o que se deverá fazer um reboot:

sudo reboot

Configuração do cartão microSD

Vamos descrever de seguida o processo de configuração do cartão microSD a usar no Raspberry Pi, procedimento que é constituído pelos seguintes passos:

  • Gravação da imagem no cartão
  • Acesso SSH
  • Primeiras configurações
  • Atualização inicial
  • Autocomplete pelo historial de comandos
  • Instalação da biblioteca para acesso ao GPIO (pigpio)
  • Instalação da biblioteca para uso de mensagens MQTT (paho-mqtt)
  • Mosquitto (MQTT broker)
  • Node-RED

Gravação da imagem no cartão

Descarregar a imagem do Raspbian (por exemplo 2019-04-08-raspbian-stretch-lite.imgdaqui. De notar que se trata duma imagem lite, ou seja apenas com o indispensável à sua utilização.

No caso da gravação da imagem do cartão microSD ser realizada em Windows, podemos recorrer ao programa Win32DiskImager.

Para que se possa efetuar um acesso ao RPi por SSH é preciso criar um ficheiro vazio com o nome ssh.

NOTA: Para evitar todos os passos seguintes é possível utilizar uma imagem criada especificamente para esta unidade curricular. Esta imagem (edm2k19.img) pode ser obtida descompactando um dos ficheiros zip existentes numa pasta partilhada juntamente com muitos outros ficheiros descritos nestas páginas.

O ficheiro zip a usar depende da versão da placa Raspebrry Pi que tenha na bancada:

  • v6l_edm2k19.zip – Placa Raspberry Pi Model B+ V1.2 (bancada 1 a 5)
  • v7l_edm2k19.zip – Placa Raspberry Pi 2 Model B (bancada 6 a 12)

Acesso SSH

Após o primeiro arranque da imagem oficial o RPi liga-se à rede por DHCP, pelo que basta descobrir no router o seu IP (o hostname é raspberrypi) e ligar a ele via SSH, por exemplo com o PuTTY. O utilizador (user) é pi a palavra-passe (password) raspberry. Este processo está aqui descrito.

A um eventual aviso “PuTTY Security Alert” deveremos carregar no botão “Sim”.

Nota: Caso use a imagem edm2k19.img o hostname que vem por omissão é o rpi-b00 e a palavra-passe a que foi indicada nas aulas.

Primeiras configurações

Executar o primeiro comando: sudo raspi-config

  • Alterar a Password (1 Change User Password)
  • Alterar o Hostname (2 Hostname), neste caso usaremos o nome rpi-bXX em que o XX é o número da bancada (de 01 a 12)
  • Mudar fuso horário (4 Localicalisations Optons + I2 Change Timezone): Europe + Lisbon
  • Expandir (7 Advanced Options + A1 Expand Filesystem) a área de ficheiros para aproveitar todo o espaço do cartão microSD

Após carregar no botão Finish é conveniente efetuar um reboot com o comando:

sudo reboot

Atualização inicial

Convém realizar uma atualização inicial do sistema, fazendo:

sudo apt-get update
sudo apt-get -y upgrade

Autocomplete pelo historial de comandos

Quando se escreve na linha de comando é muito útil o uso da tecla TAB para auto completar esse comando.

O uso das teclas do cursor UP e DOWN dão-nos também a possibilidade de percorrer o histórico de comandos. Seria igualmente útil poder escrever o início dum comando e depois poder usar essas mesmas teclas para procurar um comando no historial que comece dessa forma. Para isso, e porque o RPi possui uma shell bash, temos que fazer como está aqui sugerido:

Editar o ficheiro .inputrc:

nano ~/.inputrc

Colocando as seguintes linhas:

"\e0A": history-search-backward
"\e[A": history-search-backward
"\e0B": history-search-forward
"\e[B": history-search-forward
"\e0C": forward-char
"\e[C": forward-char
"\e0D": backward-char
"\e[D": backward-char

Não esquecer de fechar o terminal e abrir novamente para que a funcionalidade seja ativada.

Instalação da biblioteca para acesso ao GPIO (pigpio)

Para aceder às funcionalidades do interface GPIO será usada a biblioteca pigpio.

Para instalar o pigpio, fazer:

rm pigpio.zip
sudo rm -rf PIGPIO
wget abyz.me.uk/rpi/pigpio/pigpio.zip
unzip pigpio.zip
cd PIGPIO
make
sudo make install

O pigpiod ocupa cerca de 8% do CPU como se pode ver com o comando:

top

Instalação da biblioteca para uso de mensagens MQTT (paho-mqtt)

Executar os comandos:

sudo apt-get install python-setuptools
sudo easy_install pip
sudo pip install paho-mqtt

Ativação do barramentos SPI e I2C

Para se poder usar os barramentos SPI e I2C é preciso ativá-los no raspi-config:

sudo raspi-config

Nas opções de Interface (5 Interfacing Options, ativar o SPI (P4 SPI), e o I2C (P5 I2C), após o que já é possível aceder aos dispositivos, como se pode constatar pelo comando:

ls /dev/spi*; ls /dev/i2c*

Cuja resposta é:

/dev/spidev0.0  /dev/spidev0.1
/dev/i2c-1

Mosquitto

Para instalar o broker MQTT chamado Mosquitto, executar os seguintes comandos:

sudo apt-get update
sudo apt-get upgrade
 
sudo wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
sudo apt-key add mosquitto-repo.gpg.key
sudo rm mosquitto-repo.gpg.key
 
cd /etc/apt/sources.list.d/
sudo wget http://repo.mosquitto.org/debian/mosquitto-jessie.list
 
sudo apt-get update
sudo apt-get install mosquitto mosquitto-clients

Node.js

A instalação do Node RED faz-se com a ferramenta npm que por sua vez é instalada com o Node.js. A versão Raspian Lite não traz o node.js, pelo que para instalar a versão 4.8.1, fazer:

mkdir Downloads
cd Downloads
wget https://nodejs.org/dist/v4.8.1/node-v4.8.1-linux-armv6l.tar.gz
tar -xvf node-v4.8.1-linux-armv6l.tar.gz
cd node-v4.8.1-linux-armv6l
sudo cp -R * /usr/local/
cd ..
rm -r node-v4.8.1-linux-armv6l

node -v
v4.8.1
npm -v
2.15.11

Node RED

Como a versão Raspian Lite não traz qualquer node-red, é preciso instalá-lo de raiz. Uma vez instalado o node.js, a instalação do node-red faz-se executando o seguinte comando:

sudo npm install -g --unsafe-perm node-red

A versão que ficou instalada foi a 0.16.2!

Para que o node-red arranque com o Raspberry Pi, fazer isto:

sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/nodered.service -O /lib/systemd/system/nodered.service
sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/node-red-start -O /usr/bin/node-red-start
sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/node-red-stop -O /usr/bin/node-red-stop
sudo chmod +x /usr/bin/node-red-st*
sudo systemctl daemon-reload

sudo systemctl enable nodered.service

O acesso é feito no link: http://10.0.0.1XX:1880 (mudando para o IP adequado).

Dashboard

Para construir interfaces gráficos vou instalar o node-red-dashboard. Para isso fazer:

cd ~/.node-red
npm install node-red-dashboard

Não esquecer de rearrancar o Node-RED:

node-red-stop
node-red-start

Isto faz surgir um novo conjunto de nodes: dashboard

O interface pode ser acedido no link: http://10.0.0.1XX:1880/ui

Segurança

Para que o acesso seja condicionado, seguir as instruções aqui descritas.

Editar o ficheiro /home/pi/.node-red/settings.js descomentando/editando certas linhas:

    adminAuth: {
       type: "credentials",
       users: [{
           username: "admin",
           password: "$2a$08$DQGYwBOFfgqM2ByZFIyoouOGKoyrks/Yv/t2xfbZ28jqU/UGDWtJy",
           permissions: "*"
       }]
    },

O anterior código ativa a autenticação do editor. Para ativar a autenticação também no acesso às páginas descomentar/editar as linhas:

    //httpStaticAuth: {user:"user",pass:"$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN."},
    httpNodeAuth: {user:"admin",pass:"$2a$08$DQGYwBOFfgqM2ByZFIyoouOGKoyrks/Yv/t2xfbZ28jqU/UGDWtJy"},

Para obter a hash da password, começar por instalar as ferramentas do node-red:

sudo npm install -g node-red-admin

E depois executar o comando:

node-red-admin hash-pw

Que pede a password dando depois a respetiva hash.