<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Henrique Machado Broseghini</title>
    <description>The latest articles on Forem by Henrique Machado Broseghini (@henriquebros).</description>
    <link>https://forem.com/henriquebros</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F670355%2Fd3ecfdc0-7cc5-49d0-a814-bdf56eb3fafc.jpeg</url>
      <title>Forem: Henrique Machado Broseghini</title>
      <link>https://forem.com/henriquebros</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/henriquebros"/>
    <language>en</language>
    <item>
      <title>Jornada para me tornar um DevOps Jr</title>
      <dc:creator>Henrique Machado Broseghini</dc:creator>
      <pubDate>Mon, 30 Jan 2023 21:57:29 +0000</pubDate>
      <link>https://forem.com/henriquebros/jornada-para-me-tornar-um-devops-jr-1hfm</link>
      <guid>https://forem.com/henriquebros/jornada-para-me-tornar-um-devops-jr-1hfm</guid>
      <description>&lt;h2&gt;
  
  
  O começo
&lt;/h2&gt;

&lt;h3&gt;
  
  
  A Comunidade e o DevOpsDay Vitoria
&lt;/h3&gt;

&lt;p&gt;No inicio eu estudava e trabalhava com frontend, mas fui muito bem abraçado e acolhido pela comunidade DevOps, costumo dizer que fui adotado por eles, mas sinto que a palavra que defini essa comunidade é &lt;strong&gt;ACOLHIMENTO&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Sempre me senti um pouco sozinho no meio da TI por não conhecer pessoas com mesmos ideais que eu. E estar com eles me traz muito uma sensação que estou em um ambiente de amizade e seguro.&lt;/p&gt;

&lt;p&gt;Sempre gostei de ensinar, tanto que comecei meu &lt;a href="https://dev.to/henriquebros"&gt;blog&lt;/a&gt; e fiz o &lt;a href="https://github.com/HenriqueBros/Arduino4noobs" rel="noopener noreferrer"&gt;Arduino4Noobs&lt;/a&gt; junto com a comunidade &lt;a href="https://twitter.com/He4rtDevs" rel="noopener noreferrer"&gt;He4rt&lt;/a&gt;, e fazendo parte de movimentos sociais como o &lt;a href="https://nucleodetecnologia.com.br" rel="noopener noreferrer"&gt;nucleo de tecnologia do MTST&lt;/a&gt;, onde ensinamos programação e temos diversos projetos para ajudar e facilitar a vida dos acampados.&lt;/p&gt;

&lt;p&gt;No meio disso tudo fui ficando cada vez mais próximo do Jeferson o &lt;a href="https://twitter.com/badtux_" rel="noopener noreferrer"&gt;badtux_&lt;/a&gt;, fizemos o bonde o MTST, fui para o DevOpsDay Vitoria, que ai está um ponto importante, pois sinto que depois desse evento minha vida mudou completamente.&lt;/p&gt;

&lt;p&gt;Eu estava a muitos meses sem sair de casa devido a depressão, mas estar no DevOpsDay, me deu muito mais energia, vi como somos muito queridos, conheci pessoas super importantes para mim, e recebi os  melhores abraços.&lt;/p&gt;

&lt;p&gt;Depois de algum tempo comecei minha mentoria com o Jef e virei embaixador &lt;a href="https://twitter.com/LINUXtipsBR" rel="noopener noreferrer"&gt;LINUXtips&lt;/a&gt; e com todo esse esfôrço e dedicação junto com o Jef consegui a minha vaga como Analista DevOps na &lt;a href="https://spiritsec.com/" rel="noopener noreferrer"&gt;SPIRITSEC&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;E o melhor e o que mais gosto disso tudo, foi que conheci pessoas que hoje são meus amigos e que tenho um imenso carinho e admiração.&lt;/p&gt;

&lt;h2&gt;
  
  
  Entrando na SpiritSec
&lt;/h2&gt;

&lt;h3&gt;
  
  
  A primeira Semana
&lt;/h3&gt;

&lt;p&gt;Comecei na Spiritsec  dia 18/01/2023. Nessa Primeira semana aprendi muitas coisas novas e consegui aplicar muitos conhecimentos adquiridos com os cursos da Linuxtips. Trabalhar junto do Gleydson ( criador do &lt;a href="https://www.guiafoca.org/" rel="noopener noreferrer"&gt;Guia Foca&lt;/a&gt; ), Michelle, Gian e Mateus tornam esse inicio de carreira muito mais tranquilo, me dando confiança e animo nos novos desafios.&lt;/p&gt;

&lt;p&gt;Estou feliz com minha evolução e como consigo ver uma grande crescimento profissional e pessoal junto com a SpiritSec&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>resources</category>
      <category>developers</category>
    </item>
    <item>
      <title>Acionamento do motor de acordo com a hora.</title>
      <dc:creator>Henrique Machado Broseghini</dc:creator>
      <pubDate>Mon, 25 Apr 2022 22:05:07 +0000</pubDate>
      <link>https://forem.com/henriquebros/acionamento-do-motor-de-acordo-com-a-hora-3co3</link>
      <guid>https://forem.com/henriquebros/acionamento-do-motor-de-acordo-com-a-hora-3co3</guid>
      <description>&lt;p&gt;Deixarei o &lt;a href="https://github.com/HenriqueBros/Food-Water-Dog"&gt;repositório&lt;/a&gt; do projeto aberto para que vocês possam utilizar também.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bibliotecas adicionadas:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;NTPClient.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O &lt;strong&gt;NTP&lt;/strong&gt;(Protocolo de Tempo para Redes), é o padrão que permite a sincronização dos relógios dos dispositivos de uma rede. Além do protocolo de comunicação em si, o &lt;strong&gt;NTP&lt;/strong&gt; define uma série de algoritmos utilizados para consultar os servidores, calcular a diferença de tempo e estimar um erro, escolher as melhores referências e ajustar o relógio local.&lt;/p&gt;

&lt;h2&gt;
  
  
  Associações entre dispositivos:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Permanentes&lt;/strong&gt;: são criadas por uma configuração ou comando e mantidas sempre. Este é o tipo de associação recomendável para se trabalhar em aplicações do dia a dia.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Priorizáveis&lt;/strong&gt;: são específicas da versão 4 do NTP e criadas por uma configuração ou comando, podem ser desfeitas no caso de haver um servidor melhor, ou depois de um certo tempo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Efêmeras ou transitórias&lt;/strong&gt;: são criadas por solicitação de outro dispositivo NTP e podem ser desfeitas em caso de erro ou depois de um certo tempo.&lt;/p&gt;

&lt;p&gt;Estou utilizando a &lt;strong&gt;permanente&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Resolvi utilizar esse método pois, ao tentar fazer usando a biblioteca &lt;strong&gt;ctime&lt;/strong&gt;, que gera uma &lt;strong&gt;struct&lt;/strong&gt; com os dados de dias e horas não estava funcionando.&lt;/p&gt;

&lt;p&gt;Ao ser utilizado junto ao esp32 ele não recebia a hora, pois essa estrutura recebe a hora do computador em que esta sendo executado.&lt;/p&gt;

&lt;p&gt;Por esse motivo decidi receber as informações direto via internet.&lt;/p&gt;

&lt;p&gt;Pelo site &lt;a href="https://ntp.br/"&gt;NTP.br&lt;/a&gt;, e usando o link dentro da função &lt;strong&gt;timeClient&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Código para acionamento do motor:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;ligaHora&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;WiFiUDP&lt;/span&gt; &lt;span class="n"&gt;ntpUDP&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;NTPClient&lt;/span&gt; &lt;span class="n"&gt;timeClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ntpUDP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"a.st1.ntp.br"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;3600&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;horas&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;timeClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getHours&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;minutos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;timeClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getMinutes&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;Hora: %i "&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;horas&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;Minutos: %i "&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;minutos&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;horas&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;minutos&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;digitalWrite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PIN_LED&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;HIGH&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;Acendeu"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;9000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;digitalWrite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PIN_LED&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;LOW&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;60000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dentro da função &lt;em&gt;timeClient&lt;/em&gt;, é passado como parâmetro, o, o site em será pego as informações, a mudança de fuso horário.&lt;/p&gt;

&lt;p&gt;Logo em seguida é criado as variáveis inteiras &lt;em&gt;horas e minutos&lt;/em&gt; recebendo respectivamente seus valores pela função &lt;em&gt;getHours e getMinute&lt;/em&gt;. Somei mais 10 (dez) nos minutos, para diminuir a diferença entra a hora adquirida com a hora local. Pode ter está diferença de acordo com o servidor.&lt;/p&gt;

&lt;p&gt;Imprimo os mesmos para ter uma noção de como estão.&lt;/p&gt;

&lt;p&gt;Logo em seguida faço o código que ira acionar o motor. Quando o horario for igual a 7 horas e 0 minutos, ele ligará e desligara depois de 9 segundos. Ficará em espera por 1 (um) minuto para que não se acione novamente.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chamo a função &lt;strong&gt;ligaHora&lt;/strong&gt; dentro da função &lt;strong&gt;loop&lt;/strong&gt;:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;loop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;VerificaConexoesWiFIEMQTT&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="n"&gt;MQTT&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="n"&gt;ligaHora&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Essa função &lt;em&gt;loop&lt;/em&gt; chama as outras funçãos de verificação, mqtt e ligar o motor a cada 2 (dois) segundos.&lt;/p&gt;

</description>
      <category>cpp</category>
      <category>esp32</category>
      <category>diy</category>
      <category>programming</category>
    </item>
    <item>
      <title>Programação do ESP32 - Liga/desliga motor</title>
      <dc:creator>Henrique Machado Broseghini</dc:creator>
      <pubDate>Wed, 22 Dec 2021 23:42:07 +0000</pubDate>
      <link>https://forem.com/henriquebros/programacao-do-esp32-ligadesliga-motor-5bnc</link>
      <guid>https://forem.com/henriquebros/programacao-do-esp32-ligadesliga-motor-5bnc</guid>
      <description>&lt;h2&gt;
  
  
  Github do projeto
&lt;/h2&gt;

&lt;p&gt;Todo o código esta disponível em meu &lt;a href="https://github.com/HenriqueBros/Food-Water-Dog" rel="noopener noreferrer"&gt;github&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  PlatformIO IDE no VS code
&lt;/h2&gt;

&lt;p&gt;Para programar o ESP32 doit-devkit-v1(modelo) eu utilizei a extensão PlatformIO no VS code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ompseysgwwtq5hy8y01.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ompseysgwwtq5hy8y01.png" alt="PlatformIO"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Broker rodando no Raspberry
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvawcxcmlb1kip111661h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvawcxcmlb1kip111661h.png" alt="ubutu-broker"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Código embarcado no ESP32
&lt;/h2&gt;

&lt;p&gt;Utilizei a linguagem C++ para a programação, no inicio do código importei as bibliotecas.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Bibliotecas necessárias
#include &amp;lt;Arduino.h&amp;gt;
#include "WiFi.h"
#include "PubSubClient.h"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A importação do Arduino.h é necessária pois estou utilizando o PlatformIO.&lt;/p&gt;

&lt;p&gt;Depois defini as variáveis que irei utilizar.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#define PIN_LED 25 // Pino usado no ESP-32

#define TOPICO_SUBSCRIBE_LED "topico_liga_desliga_led" // Nome do Tópico, pode ser qualquer nome
#define ID_MQTT "esp32_mqtt" // ID do seu MQTT

const char* SSID = "Nome_Rede_Wifi";
const char* PASSWORD = "sua_senha";

const char* BROKER_MQTT = "Endereço do MQTT Broker";
int BROKER_PORT = 1883;//porta_do_broker

WiFiClient espClient;
PubSubClient MQTT(espClient);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//Declarando funções
void initMQTT(void);
void mqtt_callback(char* topic, byte* payload, unsigned int length);
void reconnectMQTT(void);
void reconnectWiFi(void);
void VerificaConexoesWiFIEMQTT(void);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="cm"&gt;/* Função: inicializa e conecta-se na rede WI-FI desejada */&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;initWiFi&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"------Conexao WI-FI------"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Conectando-se na rede: "&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SSID&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Aguarde"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="n"&gt;reconnectWiFi&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/* Função: inicializa parâmetros de conexão MQTT(endereço do broker, porta e seta função de callback) */
void initMQTT(void) 
{
    MQTT.setServer(BROKER_MQTT, BROKER_PORT); //informa qual broker e porta deve ser conectado
    MQTT.setCallback(mqtt_callback); //atribui função de callback (função chamada quando qualquer informação de um dos tópicos subescritos chega)
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A função &lt;em&gt;mqtt_callback&lt;/em&gt; roda a lógica principal da aplicação, fazendo com que o motor seja iniciado e desligado após 9 segundos. com o sinal enviado via celular para o &lt;em&gt;broker MQTT&lt;/em&gt;, que esta no raspberry.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/* Função: função de callback */
void mqtt_callback(char* topic, byte* payload, unsigned int length) 
{
    String msg;

    /* obtém a string do payload recebido */
    for(int i = 0; i &amp;lt; length; i++) 
    {
       char c = (char)payload[i];
       msg += c;
    }

    Serial.print("Chegou a seguinte mensagem via MQTT: ");
    Serial.println(msg);

    if (msg.equals("1"))
    {
        digitalWrite(PIN_LED, HIGH);
        Serial.print("LED aceso mediante comando MQTT");
        delay(9000);
        digitalWrite(PIN_LED, LOW);
    }

}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Caso o &lt;em&gt;subscriber&lt;/em&gt; não consiga se conectar com o &lt;em&gt;broker&lt;/em&gt; ele fica tentando se conectar ate que haja exito.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/* Função: reconecta-se ao broker MQTT */
void reconnectMQTT(void) 
{
    while (!MQTT.connected()) 
    {
        Serial.print("* Tentando se conectar ao Broker MQTT: ");
        Serial.println(BROKER_MQTT);
        if (MQTT.connect(ID_MQTT)) 
        {
            Serial.println("Conectado com sucesso ao broker MQTT!");
            MQTT.subscribe(TOPICO_SUBSCRIBE_LED); 
        } 
        else
        {
            Serial.println("Falha ao reconectar no broker.");
            Serial.println("Haverá nova tentativa de conexão em 2s");
            delay(2000);
        }
    }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Estas funções verificam se há conexão com o Wifi e ao Broker MQTT.&lt;/p&gt;

&lt;p&gt;A função &lt;em&gt;VerificaConexoesWiFIEMQTT&lt;/em&gt; chama as funções &lt;em&gt;reconnectMQTT&lt;/em&gt; e &lt;em&gt;reconnectWiFi&lt;/em&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/* Função: verifica o estado das conexões WiFI e ao broker MQTT. */
void VerificaConexoesWiFIEMQTT(void)
{
    if (!MQTT.connected()) 
        reconnectMQTT();

     reconnectWiFi();
}

/* Função: reconecta-se ao WiFi */
void reconnectWiFi(void) 
{
    if (WiFi.status() == WL_CONNECTED)
        return;

    WiFi.begin(SSID, PASSWORD); 

    while (WiFi.status() != WL_CONNECTED) 
    {
        delay(100);
        Serial.print(".");
    }

    Serial.println();
    Serial.print("Conectado com sucesso na rede ");
    Serial.print(SSID);
    Serial.println("IP obtido: ");
    Serial.println(WiFi.localIP());
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O &lt;em&gt;setup&lt;/em&gt; é a primeira coisa que o programa roda assim que é iniciado, definindo o &lt;em&gt;Serial&lt;/em&gt;, o pino como saída é setado inicialmente como desligado, depois chamando as funções &lt;em&gt;initWiFi&lt;/em&gt; e &lt;em&gt;initMQTT&lt;/em&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;void setup() {
  Serial.begin(115200);

  pinMode(PIN_LED, OUTPUT);
  digitalWrite(PIN_LED,LOW);

  initWiFi();

  initMQTT();
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A função &lt;em&gt;loop&lt;/em&gt; fica chamando periodicamente à cada 2 segundos as funções &lt;em&gt;VerificaConexoesWiFIEMQTT, MQTT.loop&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;void loop() {
    VerificaConexoesWiFIEMQTT();

    MQTT.loop();
    delay(2000);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Configurações do PlatformIO
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[env:esp32doit-devkit-v1]
platform = espressif32
board = esp32doit-devkit-v1
framework = arduino
monitor_speed = 115200
upload_speed = 921600
upload_port = COM3 ; Porta serial do seu computador
lib_deps = knolleary/PubSubClient@^2.8 ; biblioteca necessárias para o uso do MQTT
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A porta serial você pode encontra no &lt;em&gt;Gerenciador de Dispositivos&lt;/em&gt;, o meu no caso esta na porta 3 (COM3), lembre-se de instalar o drive da placa para que seu computador reconheça o dispositivo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8vfb5t3rimb681y0g49n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8vfb5t3rimb681y0g49n.png" alt="porta"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Exemplo do funcionamento do ESP32
&lt;/h2&gt;

&lt;p&gt;O exemplo foi feito na protoboard e com led, acendendo e apagando após 9 segundos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3m12unftpovyfxnhxtpk.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3m12unftpovyfxnhxtpk.gif" alt="prototipo"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>esp32</category>
      <category>cpp</category>
      <category>diy</category>
      <category>programming</category>
    </item>
    <item>
      <title>Construção do recipiente da ração automática.</title>
      <dc:creator>Henrique Machado Broseghini</dc:creator>
      <pubDate>Mon, 22 Nov 2021 03:41:21 +0000</pubDate>
      <link>https://forem.com/henriquebros/construcao-do-recipiente-da-racao-automatica-466k</link>
      <guid>https://forem.com/henriquebros/construcao-do-recipiente-da-racao-automatica-466k</guid>
      <description>&lt;h2&gt;
  
  
  O que foi utilizado:
&lt;/h2&gt;




&lt;li&gt; Placa de alumínio para:&lt;ul&gt; 
&lt;li&gt; Encaixe do cano no alimentador
&lt;/li&gt;
&lt;li&gt; Hastes de suporte para o cano
&lt;/li&gt;
&lt;/ul&gt;

&lt;/li&gt;
&lt;li&gt; Alimentador &lt;ul&gt;

&lt;li&gt; Motor
&lt;/li&gt;
&lt;li&gt; Eixo de rosca helicoidal
&lt;/li&gt;
&lt;li&gt; Caixa de aço inoxidável
&lt;/li&gt;
&lt;/ul&gt;

&lt;/li&gt;
&lt;li&gt; Cano de 1,20 metro aproximadamente


&lt;h2&gt;
  
  
  Especificações do Motor:
&lt;/h2&gt;



&lt;p&gt;O motor utilizado foi um de 12V com um rotação de 90 RPM, que é também usado em vidros de carro. Tendo uma capacidade de ate 50Kg. &lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgzhf9mbsdc8xeiwy2y3j.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgzhf9mbsdc8xeiwy2y3j.jpg" alt="Image motor do carro"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Funcionamento da comedouro:
&lt;/h2&gt;



&lt;p&gt;O recipiente tem um motor que em seu eixo há uma rosca helicoidal, com seu giro faz que a ração caia no pote de ração.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff0at3daqi4v7dy2bs4in.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff0at3daqi4v7dy2bs4in.jpeg" alt="Image parte de cima do comedouro"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fflkvspqsnxhlf6dul3fc.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fflkvspqsnxhlf6dul3fc.jpeg" alt="Image parte de baixo do comedouro"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Preparação do encaixe:
&lt;/h2&gt;



&lt;p&gt;Primeiramente cortei uma placa de alumínio aproximadamente 17.5cm X 15.0cm, para encaixar na parte superior do comedouro fiz alguns furos em sua superfície para facilitar o corte.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9zl49z0lql2uk59u1iw6.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9zl49z0lql2uk59u1iw6.jpeg" alt="Image placa com os furos"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;Depois de fazer o corte utilizando um serrinha, ela ficou dessa maneira, para a passagem da ração.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2z5e4f5g4ayornzgskbq.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2z5e4f5g4ayornzgskbq.jpeg" alt="Image placa furada"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;br&gt;
Utilizando o mesmo material da placa de aço, fiz as hastes de suporte para o cano, dobrando, cortando e furando para o encaixe dos parafusos.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1dfffceii0xdxwuuhbc8.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1dfffceii0xdxwuuhbc8.jpeg" alt="Image suporte do cano"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb7z9yi8zjpgbq9sirmry.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb7z9yi8zjpgbq9sirmry.jpeg" alt="Image suporte parafusado na placa"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;Ficando desta maneira o encaixe do cano com a placa e o suporte.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9xphr65e4ze2iz2uq85d.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9xphr65e4ze2iz2uq85d.jpeg" alt="Image cano na placa com o suporte"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;Você pode ver o funcionamento do alimentador nesse &lt;a href="https://twitter.com/BrosHenrique/status/1455671146049847298/video/1" rel="noopener noreferrer"&gt;link do vídeo&lt;/a&gt; no meu twitter.&lt;/p&gt;


&lt;/li&gt;

</description>
      <category>tutorial</category>
      <category>diy</category>
      <category>automacao</category>
      <category>pet</category>
    </item>
    <item>
      <title>Servidor MQTT-Mosquitto em Raspberry pi 3 B+</title>
      <dc:creator>Henrique Machado Broseghini</dc:creator>
      <pubDate>Mon, 30 Aug 2021 17:16:06 +0000</pubDate>
      <link>https://forem.com/henriquebros/servidor-mqtt-mosquitto-em-raspberry-pi-3-b-2d0m</link>
      <guid>https://forem.com/henriquebros/servidor-mqtt-mosquitto-em-raspberry-pi-3-b-2d0m</guid>
      <description>&lt;h2&gt;
  
  
  Instalação do Ubuntu Server no Raspberry
&lt;/h2&gt;



&lt;p&gt;Para a instalação é necessário a formatação do seu cartão SD, no meu caso eu utilizei o &lt;a href="https://www.sdcard.org/downloads/formatter/"&gt;&lt;em&gt;SD Card Formatter&lt;/em&gt;&lt;/a&gt;. Também devemos ter a imagem do &lt;a href="https://ubuntu.com/download/server"&gt;&lt;em&gt;Ubuntu Server&lt;/em&gt;&lt;/a&gt;. Tendo completado essas duas etapas tenha instalado em seu computador um software que escreve a imagem em seu cartão SD, temos o &lt;a href="https://www.balena.io/etcher/"&gt;balenaetcher&lt;/a&gt; que é bastante utilizado, mas eu optei em utilizar o &lt;a href="https://www.raspberrypi.org/software/"&gt;&lt;em&gt;Raspberry Pi Imager&lt;/em&gt;&lt;/a&gt;, feito isso basta você escrever a imagem utilizando algum desses softwares citados.&lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9LDqwLvU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wd0b88uiucfiy3847gq2.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9LDqwLvU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wd0b88uiucfiy3847gq2.jpg" alt="Ubuntu Server"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nyn3mPYd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rtqhzbclp2munggr9fro.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nyn3mPYd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rtqhzbclp2munggr9fro.jpg" alt="Raspberry Pi Imager"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Configuração do Ubuntu Server
&lt;/h2&gt;

&lt;p&gt;Se você planeja deixar o seu raspberry em uma conexão Wi-fi deve seguir esses passos:&lt;br&gt;&lt;br&gt;
Primeiro abra o diretório do cartão SD em seu computador e ache a pasta &lt;em&gt;“system-boot”&lt;/em&gt; e encontre o arquivo &lt;em&gt;network-config&lt;/em&gt;. Abra esse arquivo em algum editor de texto remova os "#", que fazem com que a linha seja lida como um comentário.&lt;br&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--s2MmTbRR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c2bt8gx7z1s4kfl87gx1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--s2MmTbRR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c2bt8gx7z1s4kfl87gx1.jpg" alt="wifi exemplo"&gt;&lt;/a&gt;&lt;br&gt;
Mude os valores do &lt;em&gt;wifi network name&lt;/em&gt;, para o nome da sua rede wifi e o &lt;em&gt;wifi password&lt;/em&gt; para sua senha. Como no exemplo abaixo:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--67IXwiuK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hmkjh1e8jp4svk9jc71h.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--67IXwiuK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hmkjh1e8jp4svk9jc71h.jpg" alt="wifi"&gt;&lt;/a&gt; &lt;br&gt;
Caso você vá utilizar seu raspberry com o cabo de rede, pode pular a parte de cima.&lt;br&gt;&lt;br&gt;
Tendo feito alguma dessas etapas você já pode colocar o cartão SD em seu raspberry. Conectando em um monitor e com teclado basta ligar o seu raspberry e logar no server com o login e senha padrão: ubuntu.&lt;br&gt;&lt;br&gt;
Para uma conexão via SSH faça o download do &lt;a href="https://www.putty.org"&gt;&lt;em&gt;Putty&lt;/em&gt;&lt;/a&gt; e do &lt;a href="https://angryip.org"&gt;angry ip scanner&lt;/a&gt; ou o &lt;a href="https://play.google.com/store/apps/details?id=com.myprog.netscan"&gt;network scanner&lt;/a&gt; no android, para obter o IP do seu raspberry. &lt;/p&gt;
&lt;h2&gt;
  
  
  Instalação do Docker no Ubuntu Server
&lt;/h2&gt;

&lt;p&gt;Para esse projeto eu escolhi utilizar o docker para estar "virtualizando" a imagem do &lt;em&gt;mosquitto&lt;/em&gt;, para que futuramente eu possa utilizar um cluster com 3 (três) raspberrys para ter uma orquestração utilizando &lt;em&gt;Kubernetes&lt;/em&gt;. Para poder colocar em pratica oque aprendi com o curso &lt;em&gt;DESCOMPLICANDO DOCKER&lt;/em&gt; da &lt;a href="https://www.linuxtips.io"&gt;Linuxtips&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Para a instalação:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para testar se a instalação foi bem sucedida digite: &lt;code&gt;docker version&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Baixando imagem do Mosquitto e inicialização do container
&lt;/h2&gt;

&lt;p&gt;Para baixar o imagem basta você digitar:  &lt;code&gt;docker pull eclipse-mosquitto&lt;/code&gt;, com isso basta digitar &lt;code&gt;docker image ls&lt;/code&gt; para ver todas as imagens digite  e selecionar a &lt;em&gt;mosquitto&lt;/em&gt;, digitando &lt;code&gt;docker container run &amp;lt;"ID da imagem"&amp;gt;&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;Com isso o seu container estará em execução e pronto para ser configurado para comunicação com seu arduino.&lt;/p&gt;

</description>
      <category>mosquitto</category>
      <category>linux</category>
      <category>docker</category>
      <category>ubuntu</category>
    </item>
    <item>
      <title>Projeto de automação de ração e água.</title>
      <dc:creator>Henrique Machado Broseghini</dc:creator>
      <pubDate>Wed, 25 Aug 2021 19:28:29 +0000</pubDate>
      <link>https://forem.com/henriquebros/projeto-de-automacao-de-racao-e-agua-3681</link>
      <guid>https://forem.com/henriquebros/projeto-de-automacao-de-racao-e-agua-3681</guid>
      <description>&lt;p&gt;Nesse primeiro post pretendo mostrar somente minhas ideias e mais para frente ir mostrando mais código e prototipagem. Deixarei o &lt;a href="https://github.com/HenriqueBros/Food-Water-Dog"&gt;repositório&lt;/a&gt; do projeto aberto para que vocês possam ir vendo a evolução do projeto.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;b&gt;Principais ideias:&lt;/b&gt;
&lt;/h2&gt;



&lt;h2&gt;
  
  
  Com o Arduino
&lt;/h2&gt;



&lt;h3&gt;
  
  
  ÁGUA:
&lt;/h3&gt;

&lt;p&gt;Para o sistema de reabastecimento de água, tenho como ideia principal o uso de uma válvula solenoide junto com um rele. Sendo reabastecida de acordo com a hora marcada. E também pelo app do celular para uma ativação a qualquer momento.&lt;/p&gt;



&lt;h3&gt;
  
  
  COMIDA:
&lt;/h3&gt;

&lt;p&gt;Para o sistema de ração, pensei em um tubo ou cano com um sistema em espiral dentro. Essa espiral ira girar com a ajuda de um motor que será controlado pelo arduino. Sendo ativado duas vezes ao dia de acordo com a hora marcada, ou via app para uma ativação instantânea.&lt;/p&gt;



&lt;h2&gt;
  
  
  Com o Raspberry:
&lt;/h2&gt;



&lt;h3&gt;
  
  
  Servidor - MOSQUITTO:
&lt;/h3&gt;

&lt;p&gt;Estará rodando no raspberry pi 3 B+, utilizando Docker para que futuramente eu possa estar fazendo um cluster (que é uma das ideias de automação residencial).&lt;/p&gt;



&lt;h2&gt;
  
  
  Aplicativo:
&lt;/h2&gt;

&lt;p&gt;A prototipação esta sendo feita pelo Figma e o app será feito em Kotlin, ainda estou estudando sobre o desenvolvimento mobile. A comunicação do app com o arduino será feita com um servidor MQTT.&lt;/p&gt;



</description>
      <category>c</category>
      <category>kotlin</category>
      <category>docker</category>
      <category>android</category>
    </item>
  </channel>
</rss>
