Manual

do

Maker

.

com

Raspberry PI - Dicas, dúvidas e erros comuns

Raspberry PI - Dicas, dúvidas e erros comuns

Está realmente se tornando comum utilizar board de outras arquiteturas como ARM e claro, o Raspberry Pi é o mais popular no momento. Mas ainda assim, vejo erros e dúvidas muito comuns e inclusive detalhes que eu próprio havia esquecido, por isso decidi escrever esse post como uma pequena anotação.

Atenção

Esse artigo é válido para todos os modelos de Raspberry, e continua sendo atualizado a cada nova dica que eu considere importante ou nova versão, portanto, pode seguir sem receio.

Alimentação

O dispositivo é energizado com um micro USB 5v ou pela USB-C, no caso do Raspberry Pi 4. A corrente necessária varia do quanto se requer do hardware, mas o mínimo recomendado vria de versão para versão. Não se incomode em utilizar fontes de alta corrente, o que não deve variar é a tensão

Pra servir como referência, dei um Ctrl+Chups na tabela que encontrei no próprio FAQ do site oficial do RPi:

raspberry-tabela_de_consumo.webp

Em suma, o recomendado é o consumo máximo tipico em condições normais.

Um detalhe FUNDAMENTAL em relação ao consumo é que você deve considerar a carga. Se você quer utilizar 4 USB com carga de 600mA (somadas as 4 portas), você deve fornecer no mínimo 600mA+ RPi + carga suficiente para suportar ruídos, onde 'RPi' é a última coluna da tabela anterior. Isto é, dependendo do modelo, vai de 180mA à 330mA. Pode parecer estranho, mas desconfie de fontes leves que oferecem muita corrente.

Carga na USB

Você tem a opção de utilizar também um HUB USB energizado. Desse modo, não terá que se preocupar com a alimentação de periféricos. Conforme a tabela anterior, a maioria dos modelos permitem seguramente o consumo de 500mA na USB. O RPi B+ e 2B pode permitir 600mA ou 1.2A.

MODEM 3G e HD's externos consomem uma carga enorme e a melhor opção é uma alimentação externa ou ao menos um HUB USB energizado. Utilizar um HUB energizado lhe permitirá ampliar o número de portas para utilização no sistema, considere essa opção.

Cuidados com GPIO

O RPi não é tolerante a 5v. Pode funcionar por um dia, uma semana, um mês, mas em algum momento você vai estragar sua board. Se pretende interagir com os GPIO's da board (coisa que recomendo muito, porque é uma delicia mexer com isso no Linux), tenha o cuidado de utilizar divisor de tensão, LLC, diodo zener, buffers não-inversores ou dispositivos que se comuniquem nesse nível lógico. Recomendo a leitura desse post onde trato da utilização de um buffer não-inversor. Nesse outro você vê a respeito de LLC e divisor de tensão.

Tenha muita, mas muita atenção mesmo em relação ao consumo no GPIO: O máximo de consumo é 50mA distribuído em TODOS os pinos. Além disso, um único pino pode drenar no MÁXIMO 16mA. Então, ainda que vá utilizar apenas um LED 5mm (que consome em torno de 25mA, conforme o resistor), não o alimente pelos pinos de GPIO.

Calcular outras cargas

Cada periférico conectado terá seu consumo, claro. Quanto mais periféricos, maior o consumo, portanto é bom ter ideia da carga sobre o RPi para saber se a alimentação está sendo suficiente.

O HDMI consome 50mA, uma câmera consome 250mA. Se for conectar uma webcam, verifique nas especificações o consumo. Não que a USB não possa suprir, mas para que você calcule a carga total do sistema.

Teclados e mouse podem variar entre 100mA e 1A, portanto veja as especificações do periférico antes de conectá-lo ao RPi ou utilize diretamente um HUB USB energizado e seja feliz.

Alimentar o RPi pela USB de um computador

Não. Não faça isso, primeiramente porque USB 2.0 oferece apenas 500mA. Ainda que utilizando um HUB USB, é dúbio dizer que alimentar o RPi será seguro, porque depende de como o HUB foi produzido (para fornecer o padrão USB 2.0, ou para mais carga). Quanto mais nova a versão do Raspberry, maior o consumo devido aos novos recursos.

Alimentação por bateria

4 pilhas AA devem oferecer seguramente 4.8v, que está dentro da faixa de tolerância, apesar de já não ser o ideal. Alcalinas fornecerão 6v, que excede em muito a tolerância. Eu particularmente recomendo a utilização de bancos de bateria, desses utilizados para dar carga extra no celular. Isto porque ele é 5v e tem uma corrente muito boa, variando conforme o modelo. O que deve-se cuidar é a queda de tensão, porque consome a bateria for acabando poderá ser prejudicial ao Raspberry. Nesse caso, monitore a tensão advinda da bateria.

Fora isso, não há outro modo de alimentação a considerar.

Cuidados com o sistema operacional

Em servidores de missão crítica, cheguei a manter o Linux up sobre carga por períodos maiores que 2 anos (2 anos sem reboot!). O Linux é extremamente estável, mas você deve considerar que ele estará rodando a partir de um cartão de memória, que é frágil. Por isso minha recomendação é que não faça muito I/O no cartão, evite armazenamento nele, evite desligamentos incorretos do sistema. Pode parecer exagero mas você vai sentir o drama se não seguir essas recomendações. Se for algo descompromissado, "haja o que hajar".  Uma opção para estender a vida útil do cartão é utilizar esse procedimento.

A partir do Raspberry Pi 3B+ há suporte para inicialização do sistema pela USB. Outras variações da Raspberry Pi 3 dependem de uma modificação na OTP.

Instalação do sistema operacional

Eu vi pessoas com dúvidas quanto a instalação do sistema. É muito simples, mas só vou exemplificar no Linux. Primeiramente, recomendo os sistemas citados aqui. Particularmente, recomendo o Raspbian.

Baixe o sistema, descomprima e então você terá uma imagem do sistema. Simplesmente transfira-a para o cartão com o dd:

dd if=imagem_do_sistema of=/dev/dispositivo_do_cartao_de_memoria_ou_pendrive_ou_hd

Ao acabar, simplesmente faça o boot e você será guiado no processo de configuração e redimensionamento do sistema de arquivos do cartão. Nesse outro post você terá mais intimidade com o processo de instalação do sistema, recomendo fortemente que leia.

Reconfigurações

Essa é uma questão importante. Você instala o sistema e tudo fica desconfigurado. Como proceder?  Segue uma série de comandos para deixar o sistema do jeitinho que você quer:

#timezone
dpkg-reconfigure tzdata
#keyboard
dpkg-reconfigure console-data
#locales
dpkg-reconfigure locales

WiFi

Infelizmente nenhum modelo anterior ao Raspberry Pi 3 vem com WiFi nativa, mas você pode utilizar qualquer dungle USB. É o que faço e com o modelo RPi 2B, é bem mais tranquilo fazê-lo, já que você não precisa se preocupar com o consumo, além de que você tem 4 USBs.

Para configurar manualmente pelo console, edite o arquivo /etc/network/interfaces. Substitua as linhas relacionadas à interface wlan0 por essas:

auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-ssid "suaRedeWireless"
wpa-psk "senhaSecreta"

Reinicie o serviço de rede:

service networking restart
systemctl daemon-reload

Se pretender usar IP estático no WiFi, o trabalho é um pouco mais doloroso.

  • Edite o arquivo /etc/wpa_supplicant/wpa_supplicant.conf
  • Adicione o seguinte conteúdo:
update_config=1 network={ ssid=”SeuSSID” scan_ssid=1 priority=15 psk=”senhaSecreta” key_mgmt=WPA-PSK id_str=”rpi”}
  • Agora edite o arquivo interfaces e invés da configuração descrita para DHCP, escreva esta configuração que segue:
iface wlan0 inet manual
    wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
    iface rpi inet static address 192.168.1.2
    gateway 192.168.1.1
    netmask 255.255.255.0
    dns-nameservers 8.8.8.8
  • Se preferir, invés de especificar o DNS no arquivo interfaces, aponte-o em /etc/resolv.conf:
echo "nameserver 8.8.8.8" >/etc/resolv.conf

Ethernet nativa - Fast Ethernet

A interface ethernet não é Gigabit porque está conectada via USB 2.0 até a versão 3B+, portanto não suporta o throughput maior que os 100Mb da fast ethernet. Se desejar configurar a interface manualmente, o arquivo é o mesmo supracitado. A seguir, uma configuração por DHCP e uma estática, para exemplo:

#DHCP
auto eth0
iface eth0 inet dhcp

#estatico
auto eth0
iface eth0 inet static
    address 192.168.1.234
    netmask 255.255.255.0
    gateway 192.168.1.1

A Raspberry Pi 4 possui ethernet Gigabit.

Já que estamos falando de configuração de rede, o DNS para resolução de nomes também é fundamental. Exemplificando com o do google:

echo "nameserver 8.8.8.8" >/etc/resolv.conf

Login sem senha

Existem algumas razões que isso pode ser útil, acredite. Se for o seu caso, basta modificar o arquivo /etc/inittabem sistemas que ainda a tenham:

#1:2345:respawn:/sbin/getty --noclear 38    400 tty1
1:2345:respawn:/bin/login -f root tty1 /    dev/tty1 2>&1

Nos sistemas mais novos esse recurso não está mais disponível.

Autenticação por pendrive

É muito legal autenticar pelo pendrive invés de digitar senha. Aproveite essa dica lendo este post.

Esqueci a senha

Sem problemas. Existe um bagolhão de modos de recuperar o acesso ao sistema. Veja como aqui.

Usar a UART do GPIO

Para essa questão um pouco mais elaborada, recomendo este artigo.

Localizar pacote que contém um comando

Se você ainda não tem o programa instalado e não sabe o nome do pacote que o provê, você poderá tentar localizado com o apt-cache:

apt-cache search dhcp3

Isso deve retornar um monte de pacotes, mais ou menos assim:

isc-dhcp-client - ISC DHCP client
isc-dhcp-common - common files used by all the isc-dhcp* packages
isc-dhcp-dev - API for accessing and modifying the DHCP server and client state
isc-dhcp-relay - ISC DHCP relay daemon
isc-dhcp-server - ISC DHCP server for automatic IP address assignment
isc-dhcp-server-ldap - DHCP server able to use LDAP as backend

Mas em alguns casos, pode não ser possível localizar um comando. Existe um tipo de 'operação reversa', que é quando você tem o comando (ou arquivo) instalado através de um pacote .deb (seja ele baixado ou instalado via apt-get) e você gostaria de identificar o nome de pacote que o provê. Para isso, utilize o comando:

dpkg -S caminho_absoluto_e_nome_do_arquivo

Se você não sabe onde está o comando, poderá localizá-lo assim:

which comando

Vamos ao exemplo do programa utilizado para medir a temperatura do Raspberry Pi:

dpkg -S $(which vcgencmd)
#resultado:
libraspberrypi-bin: /usr/bin/vcgencmd

Modos de boot

A partir da versão 3B+ o boot pela USB é um recurso nativo, tanto para HD como pendrive. Para boot por PXE pode-se utilizar o U-boot. Para instalar múltiplos sistemas, fazendo dual boot ou um monte de sistemas no mesmo cartão, pode-se utilizar o BerryBoot.

Meu Raspberry está com defeito?

O primeiro susto para iniciantes é tentar ligar o RPi sem cartão para ver se está funcionando. O máximo que você vê nesse caso é o LED acender. Isto porque essa board não tem BIOS nem nada do tipo, todo o processo de carga e reconhecimento periférico é feito diretamente pelo sistema no cartão. A board só tem programação suficiente para buscar o start do sistema no cartão, o restante é feito pelo SO.

O segundo susto para iniciantes é ligar o RPi com o cartão, mas com o sistema corrompido ou o cartão com defeito. Até se o sistema de arquivos apresentar falhas, você não terá vestígios, portanto não se desespere, a board só vai dar problema se você causar esse problema, o resto sempre apontará para anomalias no cartão de memória.

Meu Raspberry está reiniciando sem motivo aparente

Se você está seguindo as recomendações anteriormente citadas, a causa mais provável é falta de corrente. Eu comprei um carregado Samsung 5v 2A barato pra caramba pelo Mercado Livre. Parecia mesmo original, mas é uma porcaria. Não economize com fonte.

Não estou vendo imagem no HDMI

Em alguns casos pode acontecer a necessidade de forçar o HDMI. Meu raspberry estava funcionando bem, mas de repente foi-se a imagem e nem reiniciando voltava. Se houver a necessidade de forçar o HDMI, edite o arquivo /boot/config.txt e descomente as linhas:

hdmi_safe=1
hdmi_force_hotplug=1
hdmi_drive=2

Reinicie e tudo deve funcionar. Nas versões mais novas do Raspberry isso não deve ocorrer.

Pinouts - Identificando os GPIO

Além da diferença do número de pinos disponíveis, tem a questão das mudanças de posicionamento. Por exemplo, GPIO21 no Raspberry Pi é pino 13, enquanto no Raspberry 2 é o pino 40. A partir do Raspberry Pi 2 até o 4, o header é de 40 pinos e mantém os recursos no mesmo lugar. Na Raspberry Pi 4 tem alguns recursos extras nos pinos, nada muda além da adição de recursos.

raspinout-1.webp
rpi4-pinout.webp

Manipular GPIO por linha de comando

E já que falamos de GPIO, que tal mexer nisso por shell script mesmo? É simples demais. Suponhamos que deseje justamente utilizar o GPIO21. O procedimento será:

  • Habilitá-lo
  • Selecionar direção
  • Atribuir-lhe o valor

Para fazê-lo manualmente, basta seguir esse conjunto de passos.

echo 21 >/sys/class/gpio/export

echo "out" >/sys/class/gpio/gpio21/direction

echo 1 >/sys/class/gpio/gpio21/value

Medir temperatura da CPU

Um amigo de um dos grupos do facebook sugeriu que eu fizesse um script pra ligar o cooler de um Raspberry quando atingisse a temperatura X. Ah, sabia que o Raspberry tem sensor de temperatura interno para a CPU? Pois é. Tem e a resposta pode ser obtida com o comando:

vcgencmd measure_temp

Para fazer um monitoramento inocente (não estamos falando de controlar a temperatura de um reator nuclear, portanto, pode ser uma coisa simples) um shell script no cron para monitorar de minuto em minuto resolve o problema fácil.

#!/bin/sh
LIMIT=50
GPIO=21

TEMP_NOW=`vcgencmd measure_temp|sed -re 's/.*([[:digit:]]{2,})/\1/; s/\.[[:digit:]].*//'`

[ $LIMIT -gt $TEMP_NOW ] ||{
    [ -d /sys/class/gpio/gpio21 ] || {
        echo $GPIO >/sys/class/gpio/export
        echo "out" >/sys/class/gpio/gpio21/direction
    }
    echo 1 >/sys/class/gpio/gpio21/value
}

[ $LIMIT -gt $TEMP_NOW ] && {
    echo 0 >/sys/class/gpio/gpio21/value

E para editar o cron, use "crontab -e". Inclua a seguinte linha:

*/1 * * * * /home/pi/check_temp.sh

O cooler deve ser alimentado através de um transistor, o Raspberry apenas fornece esse pino de GPIO para acioná-lo. Além do mais, um diodo entre o pino de GPIO e o transistor pode ser uma ótima ideia. Dá até pra implementar PID em shell script e utilizar PWM no cooler. But, não vamos complicar as coisas.

Desligar ou ligar monitor por linha de comando

Isso pode ser feito inclusive remotamente por ssh ou MQTT ou sockets, você que escolhe. Para desligar o monitor, use:

tvservice -p
tvservice -o

Para ligar, use a sequência:

tvservice -p
chvt 1
chvt 7

Acordar display

Se estiver no console, o display entrará em descanso depois de um tempo. Para levantar, utilize esse comando (caso esteja conectado remotamente por ssh):

echo -ne "\033[9;0]" >/dev/tty1

WiFi e Bluetooth do Raspberry Pi 3 em diante

Se você colocar uma imagem de sistema (seja antiga ou nova) e não aparecer a interface WiFi, conecte-o via cabo de rede e faça uma atualização do sistema:

sudo su
apt-get update
apt-get dist-upgrade

Após todo esse processo, reinicie e certamente você já terá sua interface WiFi disponível. Depois, basta configurá-la como descrito mais acima.

Para o bluetooth, só para garantir, faça como eu fiz:

sudo apt-get install libdbus-1-dev libdbus-glib-1-dev libglib2.0-dev libical-dev libreadline-dev libudev-dev libusb-dev make

Após instalados esses pacotes, você poderá instalar o bluez dos fontes:

sudo su
mkdir temp && cd temp
wget -c https://www.kernel.org/pub/linux/bluetooth/bluez-5.39.tar.xz 
tar xvJf bluez-5.39.tar.xz  && cd bluez-5.39
./configure --disable-systemd && make && make install

Ou você pode tentar simplesmente com o pacote do bluetooth (não me xingue):

sudo apt-get install pi-bluetooth

Legal, hum?

Proteger o cartão de memória

Um dos maiores problemas que temos com Raspberry é a fragilidade do sistema operacional rodando em um cartão micro SD. Para reduzir os problemas, sugiro esse outro artigo.

Espero que essas dicas possam lhe ser realmente úteis como são para mim. E de tempos em tempos atualizo esse artigo para adicionar novas informações!

Tutorial de Raspberry Pi

Se reparar, no menu do começo da página está escrito RASPBERRY. Clicando ali você terá relacionado todos os artigos escritos sobre Raspberry nesse blog.

Inscreva-se no nosso canal Manual do Maker Brasil no YouTube.

Próximo post a caminho!

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.