O Octoprint é um host de impressão 3D com interface web. Você instala ele em um RaspberryPi, pluga na sua impressora e ela fica disponível pela rede! Já fáz uns 5 anos que venho aprimorando a minha impressora e considero o Octoprint essencial. Recentemente eu precisei reinstala-lo e aproveitei para montar esse tutorial, que é o primeiro de vários que estou escrevendo. Pegue um café, plugue o Raspberry Pi e vamos mudar a forma como você imprime em 3D!
O Octoprint roda em linux, não necessariamente precisa ser instalado em um Raspberry Pi, mas isso é o mais comum.
Pessoalmente recomendo o Raspberry Pi 3 B ou hardware superior, com os plugins a instalação pode ficar pesada.
Você tem duas opções:
- baixar uma imagem pronta como a OctoPI.
- Instalar manualmente como eu ensinarei abaixo (um pouco longo mas vale a pena).
Para efeitos didáticos assumirei que você nunca utilizou um Raspberry PI nem Linux. Se isso de fato for verdade e você não estiver determinado a se aventurar no terminal considere o OctoPI e esse excelente tutorial do Thomas Sanladerer (em inglês).
A vantagem de instalar manualmente como eu faço é que você estará com o sistema todo atualizado.
Embora seja possível atualizar os pacotes da imagem pronta eu prefiro entender o que tem no sistema.
Outra vantagem é que quando for preciso atualizar novamente você já conhecerá o processo. (A atualização deveria ocorrer ao clique de um botão mas já tive problemas e precisei atualizar manualmente.)
Downloads necessários
- Raspian (Sistema Operacional, se não estiver instalado no Raspberry Pi).
- Etcher (Para gerar o sdcard do Raspberry Pi)
- Putty (Para acesso remoto ao RaspberryPi, se você utiliza windows)
Faremos o download do Octoprint diretamente do Git de dentro do Raspberry Pi.
Sempre que possível gosto de instalar apenas o essencial no sistema, por isso optei pelo Raspian lite.
A versão lite do Raspian no momento tem 346MB contra 1.6GB da versão desktop (arquivos compactados).
A versão lite não possui interface gráfica, se você optar pela versão desktop o processo continua sendo o mesmo.
Instalando o Raspian no SD Card
Primeiramente instale o Etcher, basta executar o instalador e concordar com os termos de uso:
Aguarde o progresso da instalação, nenhuma ação adicional é necessária:
Ao concluir a instalação o Etcher vai abrir, se você receber uma mensagem de erro verifique se você possui unidades criptografadas:
Identifiquei que esse erro acontece quando se utiliza BitLocker em algum disco, basta destravar todos os discos e abrir novamente.
Coloque o cartão de memória do Raspberry Pi no computador, ele será detectado automaticamente pelo Etcher.
Extraia o arquivo zip do Raspian que você baixou, a imagem é bem maior, no meu caso foi de 364MB para 1.72GB.
Abra a imagem do Raspian no Etcher:
Escolha o dispositivo onde o Cartão de memória esta:
Inicie o processo no botão “Flash“, progresso e estimativa de tempo serão exibidos no lugar do botão:
Ao final do processo será exibida uma tela de sucesso:
Você agora pode retirar o cartão introduzir no Raspberry Pi, plugar os cabos e liga-lo.
Configurando o Raspian
Como eu não tenho como capturar a tela diretamente eu fiz as capturas utilizando o putty que explicarei a seguir.
Ao ligar o raspberry pi você verá as mensagens de boot do dispositivo, o diagnóstico de todos os itens detectados pela placa e finalmente o pedido de login.
O login padrão é:
usuário: pi
senha: raspberry
(a senha não aparece quando você digita, isso é normal do linux)
Wifi
A primeira coisa que faremos é conecta-lo à rede. Para ter certeza de que ele pode “ver” a rede, utilize esse comando:
sudo iwlist wlan0 scan | grep ESSID
Com isso você deve ver as redes ao alcance do Raspberry Pi.
Para configurar a sua rede será preciso editar um arquivo de texto com o comando:
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
(quando eu estava capturando a tela utilizei o vi no lugar do nano, então sua tela pode ter aparência diferente)
Adicione os detalhes da sua rede no fim do arquivo, dessa forma:
network={ ssid="Sua Rede" psk="ASenhaDaSuaRede" }
(Você pode mudar o código de pais para Brasil como eu fiz na primeira linha do arquivo. Nunca tive problemas por causa disso, em tese isso muda a faixa de canais permitidos. Isso só fará efeito se o seu roteador também estiver configurado assim.)
Utilize Ctrl+O para salvar e Ctrl+X para sair do arquivo.
Se você preferir não deixar a senha da rede escrita explicitamente no arquivo, utilize o comando:
wpa_passphrase "Nome da Rede" "Sua Senha"
Isso vai exibir a senha em um formato seguro para você colocar no arquivo:
Para ter certeza de que o Wifi vai funcionar automaticamente quando ligar eu gosto de reiniciar e ver se ele conecta. Para isso utilize o comando:
sudo reboot
Para verificar se o Wifi está funcionando utilize o seguinte comando:
ifconfig wlan0
Expandindo o sistema de arquivos
Quando você instalou o sistema no cartão, o Etcher descomprimiu uma imagem de sistema no seu cartão. Na maioria das vezes o tamanho do seu cartão é maior do que o necessário para a imagem. Para o raspberry ter acesso a todo o espaço disponível precisamos expandir o sistema de arquivos para utilizar todo o espaço disponível.
Fazemos isso através do utilitário raspi-config que tem várias funções, para abri-lo digite:
sudo raspi-config
Escolha a opção 7 – Opções Avançadas:
Dentro dessa opção, escolha a opção A1 – Expandir Sistema de Arquivos
Você receberá uma mensagem informando que isso será concluído após reiniciar o dispositivo:
Trocando a senha
Você pode trocar a senha pela linha de comando, como em qualquer linux, mas já que estamos com o raspi-config aberto podemos utiliza-lo para trocar a senha na primeira opção:
Você será levado para uma tela de troca de senha e como de costume ao escrever você não verá “********”.
É uma boa ideia trocar a senha, caso contrário qualquer um na sua rede poderá acessar o dispositivo como administrador. Vulnerabilidades como essa são utilizadas em ataques o tempo todo.
Trocando o Nome
Trocar o nome do dispositivo facilita a organização da rede. Você poderá acessar utilizando um nome como “Impressora3d” ao invés do endereço IP.
Para isso escolha a segunda opção 2 – Hostname:
Escolha um novo nome:
Habilitando Acesso Remoto
Para poder gerenciar remotamente o Raspberry Pi utilizaremos o SSH. Para ativa-lo Selecione a opção 5 – Interfacing Options:
Dentro dessa opção escolha a opção P2 – SSH:
Reiniciando
Para essas alterações terem efeito devemos reiniciar o Raspberry Pi.
Selecione a opção “Finish” no menu e confirme que deseja reiniciar o dispositivo:
Pequenas correções
Tudo deveria funcionar, mas pelo menos na versão que instalei aqui precisei fazer algumas correções antes de acessar remotamente.
Embora o nome do dispositivo já aparece diferente na tela de login (com o nome que você escolheu) ele ainda não aparece assim na rede.
Para poder acessar utilizando o nome de rede precisamos instalar o suporte a rede no padrão que o windows usa, fazemos isso com o comando:
sudo apt-get -y install samba
A partir desse ponto será possível acessar utilizando o nome do dispositivo. Para testar você pode utilizar o comando ping em seu PC:
ping nomedodispositivo
(No windows utilize o CMD ou Powershell, no Mac ou Linux o aplicativo Terminal)
A próxima correção é limpar as credenciais para o acesso remoto funcionar.
Para isso utilize os seguintes comandos:
sudo rm /etc/ssh/ssh_host_* sudo dpkg-reconfigure openssh-server
Isso vai gerar uma nova assinatura para o SSH funcionar. Isso não deveria ser necessário mas parece ser um problema comum.
Utilizando SSH
O SSH é um protocolo que nos dá acesso remoto ao sistema.
A partir desse ponto não precisamos mais estar com o teclado e monitor plugado no Raspberry Pi. Faremos toda a configuração remotamente pelo SSH.
Se você utiliza Linux ou Mac basta abrir o terminal e digitar:
ssh nomeDoSeuRaspberryPi
Se você utiliza windows, basta abrir o Putty e digitar o nome do dispositivo no campo hostname:
Ao clicar em “Open” para abrir uma nova conexão o usuário e senha será solicitado:
Se ele mostrar uma mensagem perguntando se você confia no dispositivo basta aceitar.
(dica: para colar os códigos no terminal basta usar o botão direito do mouse).
Instalando o Octoprint
Antes de mais nada vamos atualizar o sistema e os pacotes instalados com o comando:
sudo apt-get update; sudo apt-get dist-upgrade
Ele vai pedir para você confirmar a instalação e basta apertar enter:
Agora vamos instalar algumas ferramentas necessárias:
sudo apt-get install python-pip python-dev python-setuptools python-virtualenv git libyaml-dev build-essential
Agora vamos fazer o download da ultima versão do Octoprint:
cd ~ git clone https://github.com/foosel/OctoPrint.git
Finalmente vamos compilar e instalar a aplicação:
*Edit: Atualizado para python3
cd OctoPrint virtualenv --python=/usr/bin/python3 venv ./venv/bin/pip install pip --upgrade ./venv/bin/python setup.py install mkdir ~/.octoprint
Vamos dar permissão para o usuário padrão rodar o programa:
sudo usermod -a -G tty pi sudo usermod -a -G dialout pi
Nesse ponto já podemos testar ser o Octoprint funciona:
~/OctoPrint/venv/bin/octoprint serve
Você receberá diversas mensagens sobre as atualizações que ele está fazendo.
Em algum lugar do output haverá uma mensagem dizendo que ele está acessível na porta 5000:
Deixe essa janela de terminal aberta, vamos voltar para ela em breve.
Para acessar o Octoprint abra um navegador no seu pc e acesse http://nomedoseudispositivo:5000:
Configurando o Octoprint
Na primeira tela você pode escolher um nome de usuário e senha ou desabilitar o login.
Não recomendo desabilitar a senha, é possível compartilhar o acesso somente da camera.
Se você não utilizar senha sua impressora estará aberta para qualquer controlar ela pela rede. Controlar pela rede inclui parar sua impressão, começar uma nova ou aquece-la excessivamente e danifica-la.
Clique em Keep Access Control Enabled e depois em Next
Ignore a configuração da Cura Engine, é preciso instala-la primeiro.
Na próxima tela temos algumas abas para configurar alguns dados da impressora.
Na primeira podemos escolher nome e modelo (facilita quando tem mais de uma):
O tamanho e formato da prancha, para visualização das camadas e controle:
A velocidade máxima dos eixos (o firmware da impressora ainda tem prioridade sobre isso):
E o número de extrusores:
A próxima tela tem um detalhe importante, é a de configuração dos comandos:
Preenchi com o comando para reiniciar o Octoprint:
sudo service octoprint restart
(esse comando não está disponível ainda porque ainda não configuramos o serviço)
E reiniciar o Raspberry Pi:
sudo reboot
Repare que eu deixei o comando de desligar em banco e existe um motivo para isso.
Se desligarmos o Raspberry Pi perderemos acesso a ele mas isso não desligará a impressora. Isso aconteceria se você tivesse um relê que o raspberry pudesse controlar para cortar a energia da impressora (explicarei em um outro artigo como fazer e configurar isso). A impressora tem uma série de medidas de segurança para não por fogo na casa, mas mante-la energizada sem poder controla-la em um cenário remoto é um risco de incêndio ou dano ao hardware. Por isso eu deixo tudo ligado e desligo na tomada manualmente.
Na próxima tela, para o update automático funcionar preencha o campo com:
/home/pi/OctoPrint
Mantenha o seletor em “Release” para receber somente atualizações testadas e estáveis.
A próxima tela é para configuração da câmera, ignore essa tela pois ainda precisamos instalar o suporte à camera.
Na tela seguinte, clique em “Finish” para concluir a configuração. Você finalmente terá acesso à interface do OctoPrint:
Iniciando automaticamente
Agora que conseguimos rodar o OctoPrint vamos configura-lo para iniciar automaticamente.
Antes de mais nada pare o programa. Voltando para o terminal do Raspberry onde ele está rodando digite Ctrl+C para encerrar o programa.
Para isso vamos registra-lo como um serviço que roda ao ligar o Raspberry PI.
Copie e habilite os scripts modelo com os seguintes comandos:
sudo cp ~/OctoPrint/scripts/octoprint.init /etc/init.d/octoprint sudo chmod +x /etc/init.d/octoprint sudo cp ~/OctoPrint/scripts/octoprint.default /etc/default/octoprint
Edite o arquivo “/etc/default/octoprint”:
sudo nano /etc/default/octoprint
Remova o # antes do caminho do daemon deixando a linha dessa forma:
DAEMON=/home/pi/OctoPrint/venv/bin/octoprint
Salve o arquivo e feche. (Ctrl+O, Ctrl+X)
Agora adicione-o à inicialização com o comando:
sudo update-rc.d octoprint defaults
Pronto, agora o sistema já o entenderá como um serviço e você pode usar a sintaxe:
sudo service octoprint {start|stop|restart}
Ou seja, para iniciar o OctoPrint use:
sudo service octoprint start
Repare que o terminal não fica mais bloqueado e você pode continuar usando.
Se precisar parar basta rodar o comando trocando o start por stop ou restart conforme a necessidade.
Agora ele já deve subir automaticamente quando você ligar o Raspberry Pi.
Para testar use o comando sudo reboot para reiniciar (ou deligue a fonte e ligue novamente).
Conectando a impressora
Com o Octoprint instalado basta plugar a impressora ao Raspberry Pi para poder começar a usar.
Antes de mandar imprimir ou dar comandos a ela é preciso apenas escolher as opções de conexão:
No meu caso, deixar tudo no automático funciona, eu apenas lembro de marcar para conectar automaticamente ao ligar e salvar as opções.
Ao conectar ela deve aparecer como Operational e os sensores de temperatura começarão ao funcionar.
Já é possível dar comandos, ajustas a temperatura e até imprimir.
Configurando a Camera
Um dos recursos mais legais do Octoprint é poder assistir a impressão remotamente.
Plugando uma WebCam no USB do Raspberry Pi podemos assistir, gravar e até fazer um time lapse automático das impressões.
Para isso funcionar vamos utilizar o MJPG-Streamer (esses comandos foram um pouco demorados no meu Pi3):
cd ~ sudo apt-get install subversion libjpeg62-turbo-dev imagemagick ffmpeg libv4l-dev cmake git clone https://github.com/jacksonliam/mjpg-streamer.git cd mjpg-streamer/mjpg-streamer-experimental export LD_LIBRARY_PATH=. make
Agora você deve ser capaz de iniciar a camera com o seguinte comando:
./mjpg_streamer -i "./input_uvc.so" -o "./output_http.so"
*Caso o comando anterior não funcione, é possivel que você precise utiliza-la no modo YUV. Isso é bastante pesado e pode atrapalhar o desempenho do sistema e até a impressão, mas o comando para isso é:
./mjpg_streamer -i "./input_uvc.so -y" -o "./output_http.so"
**Caso você esteja utilizando o modulo de camera oficial do Raspberry PI o comando nesse caso é:
./mjpg_streamer -i "./input_raspicam.so -fps 5" -o "./output_http.so"
Você provavelmente verá alguns avisos e erros mas no final o comando deve te avisar que a camera está disponível na porta 8080:
Se tudo ocorreu bem você será capaz de acessar a camera no endereço: http://nomedoseudispositivo:8080/?action=stream:
Agora abra o arquivo de configuração:
nano ~/.octoprint/config.yaml
Vá até o fim do arquivo e adicione as seguintes linhas:
webcam: stream: http://nomedoseudispositivo:8080/?action=stream snapshot: http://127.0.0.1:8080/?action=snapshot ffmpeg: /usr/bin/avconv
Talvez você tenha percebido o que parecer ser um erro nessa configuração. O endereço de stream aponta para o dispositivo pelo nome mas o snapshot aponta para localhost (127.0.0.1).
Isso funciona da seguinte forma, o endereço stream é passado para o navegador na aba de controle e o navegador precisa acessar o dispositivo pelo nome para abrir um stream de video. Se você deseja acessar o stream de vídeo de fora da rede, você precisa configurar um ddns, mapear uma porta para esse feed de vídeo e usar esse novo endereço nessa configuração. Esse processo pode ser um pouco complicado e por isso vou explica-lo em um artigo futuro.
O endereço de snapshot é de uso interno do Octoprint e por isso aponta para 127.0.0.1 para ser mais rápido. Esse snapshot é utilizado para capturar as imagens que depois são transformadas em um video de time lapse quando essa opção está habilitada.
Salve e feche o arquivo (Ctrl+O, Enter, Ctrl+X).
Agora vamos criar alguns scripts para controle da camera com os seguintes comandos:
mkdir /home/pi/scripts nano /home/pi/scripts/webcam
Coloque o código abaixo, salve e feche o script (Ctrl+O, Enter, Ctrl+X).
#!/bin/bash # Start / stop streamer daemon case "$1" in start) /home/pi/scripts/webcamDaemon >/dev/null 2>&1 & echo "$0: started" ;; stop) pkill -x webcamDaemon pkill -x mjpg_streamer echo "$0: stopped" ;; *) echo "Usage: $0 {start|stop}" >&2 ;; esac
Agora vamos criar o arquivo que rodará o serviço da camera (Daemon):
nano /home/pi/scripts/webcamDaemon
Cole o código abaixo, salve e feche o script (Ctrl+O, Enter, Ctrl+X).
Tenha o cuidado de maximizar a tela do putty para que não ocorra quebras de linha, caso contrário algo pode não funcionar.
#!/bin/bash MJPGSTREAMER_HOME=/home/pi/mjpg-streamer/mjpg-streamer-experimental MJPGSTREAMER_INPUT_USB="input_uvc.so" MJPGSTREAMER_INPUT_RASPICAM="input_raspicam.so" # init configuration camera="auto" camera_usb_options="-r 640x480 -f 10" camera_raspi_options="-fps 10" if [ -e "/boot/octopi.txt" ]; then source "/boot/octopi.txt" fi # runs MJPG Streamer, using the provided input plugin + configuration function runMjpgStreamer { input=$1 pushd $MJPGSTREAMER_HOME echo Running ./mjpg_streamer -o "output_http.so -w ./www" -i "$input" LD_LIBRARY_PATH=. ./mjpg_streamer -o "output_http.so -w ./www" -i "$input" popd } # starts up the RasPiCam function startRaspi { logger "Starting Raspberry Pi camera" runMjpgStreamer "$MJPGSTREAMER_INPUT_RASPICAM $camera_raspi_options" } # starts up the USB webcam function startUsb { logger "Starting USB webcam" runMjpgStreamer "$MJPGSTREAMER_INPUT_USB $camera_usb_options" } # we need this to prevent the later calls to vcgencmd from blocking # I have no idea why, but that's how it is... vcgencmd version # echo configuration echo camera: $camera echo usb options: $camera_usb_options echo raspi options: $camera_raspi_options # keep mjpg streamer running if some camera is attached while true; do if [ -e "/dev/video0" ] && { [ "$camera" = "auto" ] || [ "$camera" = "usb" ] ; }; then startUsb elif [ "`vcgencmd get_camera`" = "supported=1 detected=1" ] && { [ "$camera" = "auto" ] || [ "$camera" = "raspi" ] ; }; then startRaspi fi sleep 120 done
Agora marque os arquivos como executáveis:
chmod +x /home/pi/scripts/webcam chmod +x /home/pi/scripts/webcamDaemon
Agora vamos adicionar os botões de controle da camera na interface (para iniciar e parar o serviço pela interface caso você tenha problemas com desempenho da camera).
Edite o arquivo de configuração:
nano /home/pi/.octoprint/config.yaml
No fim do arquivo cole o seguinte código:
system: actions: - action: streamon command: /home/pi/scripts/webcam start confirm: false name: Start video stream - action: streamoff command: /home/pi/scripts/webcam stop confirm: false name: Stop video stream
Salve e feche o arquivo (Ctrl+O, Enter, Ctrl+X).
Por fim, vamos colocar a câmera em início automático editando o arquivo /etc/rc.local:
sudo nano /etc/rc.local
Adicione a seguinte linha antes do da ultima linha (antes do exit 0):
/home/pi/scripts/webcam start
(se você tiver problemas de desempenho com a camera, o que pode acontecer em modelos mais antigos do Raspberry Pi, você pode remover essa linha e inicia-la manualmente quando necessário)
o fim do arquivo deve ficar assim:
Se tudo deu certo você pode reiniciar o Raspberry PI e ao acessar o Octoprint, os recursos de câmera devem estar disponíveis na interface.
sudo reboot
Os botões para iniciar e parar o serviço de camera ficam nas opções de energia:
Conclusão
Se você chegou até aqui você agora tem uma instalação funcional e atualizada do Octoprint, a versão atual já é capaz de se atualizar pela interface, mas se você encontrar algum problema basta executar os seguintes comandos:
cd ~/OctoPrint/ git pull ./venv/bin/python setup.py clean ./venv/bin/python setup.py install
Também é possivel instalar diversos plugins pela interface, existem alguns realmente úteis, sugiro que você explore as opções disponíveis!
Se algo que você procura ficou de fora, você pode dar uma olhada nesse excelente tutorial feito pela criadora do Octoprint, Gina Häußge (em inglês).