<?xml version="1.0" encoding="UTF-8" ?><!-- generator=Zoho Sites --><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><atom:link href="https://www.uktech.com.br/bloguk/tag/arduino/feed" rel="self" type="application/rss+xml"/><title>UKTech - Blog UKTech #Arduino</title><description>UKTech - Blog UKTech #Arduino</description><link>https://www.uktech.com.br/bloguk/tag/arduino</link><lastBuildDate>Thu, 07 May 2026 09:38:38 -0700</lastBuildDate><generator>http://zoho.com/sites/</generator><item><title><![CDATA[ESP-IDF: Utilizando MQTT em seus projetos]]></title><link>https://www.uktech.com.br/bloguk/post/esp-idf-utilizando-mqtt-em-seus-projetos</link><description><![CDATA[<img align="left" hspace="5" src="https://www.uktech.com.br/ilya-pavlov-OqtafYT5kTw-unsplash.jpg"/>O MQTT (Message Queuing Telemetry Transport) emerge como uma poderosa solução de comunicação para o mundo interconectado de dispositivos na era da Int ]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_NPqUDks4RoWvCcAlgyJ4HA" data-element-type="section" class="zpsection "><style type="text/css"> [data-element-id="elm_NPqUDks4RoWvCcAlgyJ4HA"].zpsection{ border-radius:1px; } </style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_6gyCB6dURCqICFRlNlTFCg" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm_5HGJGuNSTaKLCxTFLLcmVA" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"></style><div data-element-id="elm_rnV1JAdJQVuJjdKVsoCEaA" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_rnV1JAdJQVuJjdKVsoCEaA"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-justify " data-editor="true"><div style="color:inherit;"><div>O MQTT (Message Queuing Telemetry Transport) emerge como uma poderosa solução de comunicação para o mundo interconectado de dispositivos na era da Internet das Coisas (IoT). Este protocolo leve e eficiente foi projetado para facilitar a troca de mensagens entre dispositivos distribuídos em redes com larguras de banda variadas. Com sua arquitetura baseada em publicação/assinatura, o MQTT proporciona uma comunicação assíncrona, permitindo que dispositivos troquem informações de forma eficaz e sem a necessidade de conexões persistentes.&nbsp;</div><div>Uma das principais vantagens do uso do MQTT é a sua baixa sobrecarga de rede, o que o torna ideal para dispositivos com recursos limitados, como micro controladores. Além disso, o MQTT é altamente escalável e flexível, permitindo a comunicação entre milhares de dispositivos simultaneamente.</div><div>Para utilizar o MQTT em seus projetos baseados no ESP-IDF, é necessário primeiro configurar um broker MQTT, que será responsável por receber e encaminhar as mensagens entre os dispositivos. Em seguida, você pode utilizar a biblioteca MQTT do ESP-IDF para se conectar ao broker, publicar e assinar tópicos e trocar informações com outros dispositivos.</div><div>Ao utilizar o MQTT em seus projetos, você poderá criar aplicações IoT robustas e eficientes, permitindo que seus dispositivos se comuniquem de forma confiável e escalável.</div></div></div>
</div><div data-element-id="elm_38QznfqGgc0Pgv5tHwjW5Q" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_38QznfqGgc0Pgv5tHwjW5Q"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="font-size:20px;">Broker</span></h2></div>
<div data-element-id="elm_jFPdFMimYm1ojYy3LLXPqQ" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_jFPdFMimYm1ojYy3LLXPqQ"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><div>Para fins didaticos neste tutorial utilizaremos o broker de testes gratuito disponível no endereço:</div><div><div><a href="https://www.emqx.com/en/mqtt/public-mqtt5-broker" title="[broker.emqx.io]" target="_blank" rel="">[broker.emqx.io]</a>&nbsp;na porta 1883.</div></div></div></div>
</div><div data-element-id="elm_o7blYvav0zPvbkZ-2RlG7w" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_o7blYvav0zPvbkZ-2RlG7w"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="font-size:20px;">Objetivo</span></h2></div>
<div data-element-id="elm_JUPLLSzaa1_TViF2HKSN2g" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_JUPLLSzaa1_TViF2HKSN2g"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;">A aplicação ira conectar ao WiFi obeter o endereço IP via DHCP, em seguida a mesma ira se increver no topico MQTT e publicar uma mensagem, além de imprimir no monitor serial as mensagens recebidas no mesmo topico.</span><br></p></div>
</div><div data-element-id="elm_3BV9V3ZMRrc2klHnnJhIBQ" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_3BV9V3ZMRrc2klHnnJhIBQ"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="font-size:20px;">Código</span></h2></div>
<div data-element-id="elm_ZXfuMhvYRovhYNk7VUB_Wg" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_ZXfuMhvYRovhYNk7VUB_Wg"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;">A execução inicial do código é conduzida pela função wifi_app_start(). Essa função tem a responsabilidade de iniciar o Wi-Fi, estabelecer a conexão com a internet e, adicionalmente, através de uma função de callback configurada para ser acionada após o ESP receber um endereço IP válido, estabelecer a conexão com o MQTT.</span><br></p></div>
</div><div data-element-id="elm_DnpBvPzhRw2h4eheDzvgpg" data-element-type="codeSnippet" class="zpelement zpelem-codesnippet "><div class="zpsnippet-container"><script src="https://cdn.jsdelivr.net/gh/google/code-prettify@master/loader/run_prettify.js"></script><pre style="font-family:monospace;font-size:14px;background-color:rgb(229, 230, 230);"><code class="prettyprint">
static void wifi_event_handler(void *event_handler_arg, esp_event_base_t event_base, int32_t event_id, void *event_data)
{
    if (event_id == WIFI_EVENT_STA_START)
    {
        ESP_LOGI(TAG, "Tentando conexao wifi....\n");
    }
    else if (event_id == WIFI_EVENT_STA_CONNECTED)
    {
        ESP_LOGI(TAG, "WiFi conenctado");
    }
    else if (event_id == WIFI_EVENT_STA_DISCONNECTED)
    {
        ESP_LOGI(TAG, "WiFi desconectado\n");
        if (retry_num < 5) { esp_wifi_connect(); retry_num++; ESP_LOGI(TAG, "Tentando reconexao wifi...\n"); } } else if (event_id== IP_EVENT_STA_GOT_IP) { ESP_LOGI(TAG, "IP recebido"); //Inicia procedimento de conexão ao MQTT mqtt_app_start(); } } esp_err_t wifi_app_start() { //Inicializa o armazenamento flash (requerido pelo driver de wifi) ESP_ERROR_CHECK(nvs_flash_init()); //Inicializa o sistema Wi-fi e a pilha TCP/IP esp_netif_init(); esp_event_loop_create_default(); esp_netif_create_default_wifi_sta(); wifi_init_config_t wifi_initiation=WIFI_INIT_CONFIG_DEFAULT(); esp_wifi_init(&wifi_initiation); //Registra as funçoes de callback para os eventos de wifi e ip esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, wifi_event_handler, NULL); esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, wifi_event_handler, NULL); //Estrutura de incialização wifi_config_t wifi_configuration={ .sta={ .ssid="" , .password="" , } }; //Faz uma cópia das variaveis globais para dentro da estrutura de inicialização strcpy((char*)wifi_configuration.sta.ssid, ssid); strcpy((char*)wifi_configuration.sta.password, passwd); //Atribui os parametros de inicialização esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_configuration); //Inicializa a conexão esp_wifi_start(); esp_wifi_set_mode(WIFI_MODE_STA); esp_wifi_connect(); return ESP_OK; }</code></pre></div>
</div><div data-element-id="elm_tZtnZ2OZ1bTqkN0_xmfBCQ" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_tZtnZ2OZ1bTqkN0_xmfBCQ"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;">A função mqtt_app_start() é invocada para configurar o endereço do broker MQTT e definir a função de callback responsável por gerenciar os eventos associados. Após a conexão bem-sucedida com o broker, o ESP se inscreve em um tópico específico e envia uma mensagem correspondente. Adicionalmente, o conteúdo desse tópico é impresso no monitor serial.&nbsp;&nbsp;</span><br></p></div>
</div><div data-element-id="elm_z5GGI8NhSj2mlOkbgUjUiw" data-element-type="codeSnippet" class="zpelement zpelem-codesnippet "><div class="zpsnippet-container"><script src="https://cdn.jsdelivr.net/gh/google/code-prettify@master/loader/run_prettify.js"></script><pre style="font-family:monospace;font-size:14px;background-color:rgb(229, 230, 230);"><code class="prettyprint">
static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data)
{
    esp_mqtt_event_handle_t event = event_data;
    switch ((esp_mqtt_event_id_t)event_id)
    {
    case MQTT_EVENT_CONNECTED:
        ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED");

        char *topico = "testtopic/238191212838";
        char *mensagem = "Olá mundo";

        esp_mqtt_client_publish(handler_args, topico, mensagem, 0, 0 ,0 );
        esp_mqtt_client_subscribe_single(handler_args, topico, 0);

        break;
    case MQTT_EVENT_DISCONNECTED:
        ESP_LOGI(TAG, "MQTT_EVENT_DISCONNECTED");
        break;
    case MQTT_EVENT_SUBSCRIBED:
        break;
    case MQTT_EVENT_UNSUBSCRIBED:
        ESP_LOGI(TAG, "MQTT_EVENT_UNSUBSCRIBED, msg_id=%d", event->msg_id);
        break;
    case MQTT_EVENT_PUBLISHED:
        ESP_LOGI(TAG, "MQTT_EVENT_PUBLISHED, msg_id=%d", event->msg_id);
        break;
    case MQTT_EVENT_DATA:
        ESP_LOGI(TAG, "Dados recebidos: ");
        printf("TOPICO=%.*s\r\n", event->topic_len, event->topic);
        printf("DADOS=%.*s\r\n", event->data_len, event->data);
        break;
    default:
        ESP_LOGI(TAG, "Other event id:%d", event->event_id);
        break;
    }
}

static void mqtt_app_start(void)
{

    esp_mqtt_client_config_t mqtt_cfg = {
        .broker.address.uri = "mqtt://broker.emqx.io:1883",
    };

    esp_mqtt_client_handle_t client = esp_mqtt_client_init(&mqtt_cfg);

    esp_mqtt_client_register_event(client, ESP_EVENT_ANY_ID, mqtt_event_handler, client);
    esp_mqtt_client_start(client);
}
</code></pre></div>
</div><div data-element-id="elm_8Ok4iBs488FRcyeSvZ9l5g" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_8Ok4iBs488FRcyeSvZ9l5g"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="font-size:20px;">Resultado</span></h2></div>
<div data-element-id="elm_Se17MxBBMyPywuRtOAwaIQ" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_Se17MxBBMyPywuRtOAwaIQ"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;">Usando o cliente MQTTX para interagir com o broker:</span><br></p></div>
</div><div data-element-id="elm_EQMPp1GgkqgO1JMXtcefyA" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_EQMPp1GgkqgO1JMXtcefyA"] .zpimage-container figure img { width: 1110px ; height: 887.65px ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_EQMPp1GgkqgO1JMXtcefyA"] .zpimage-container figure img { width:723px ; height:578.17px ; } } @media (max-width: 767px) { [data-element-id="elm_EQMPp1GgkqgO1JMXtcefyA"] .zpimage-container figure img { width:415px ; height:331.87px ; } } [data-element-id="elm_EQMPp1GgkqgO1JMXtcefyA"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-center zpimage-size-fit zpimage-tablet-fallback-fit zpimage-mobile-fallback-fit hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/Untitled-2.png" width="415" height="331.87" loading="lazy" size="fit" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_pjryIkcCqAWCDctAwsNuNA" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_pjryIkcCqAWCDctAwsNuNA"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;">Mensagem enviada pelo computador:</span><br></p></div>
</div><div data-element-id="elm_XHwaNxweWGM50s3kyeuItA" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_XHwaNxweWGM50s3kyeuItA"] .zpimage-container figure img { width: 736px !important ; height: 184px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_XHwaNxweWGM50s3kyeuItA"] .zpimage-container figure img { width:736px ; height:184px ; } } @media (max-width: 767px) { [data-element-id="elm_XHwaNxweWGM50s3kyeuItA"] .zpimage-container figure img { width:736px ; height:184px ; } } [data-element-id="elm_XHwaNxweWGM50s3kyeuItA"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-center zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/Untitled%20-1--1.png" width="736" height="184" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_tI9k5EczVvged_OxWd9mig" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_tI9k5EczVvged_OxWd9mig"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;">Mensagem recebida no ESP:</span><br></p></div>
</div><div data-element-id="elm_Ksd3MUtFWkCdbiiSOzQvvg" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_Ksd3MUtFWkCdbiiSOzQvvg"] .zpimage-container figure img { width: 1110px ; height: 217.66px ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_Ksd3MUtFWkCdbiiSOzQvvg"] .zpimage-container figure img { width:723px ; height:141.77px ; } } @media (max-width: 767px) { [data-element-id="elm_Ksd3MUtFWkCdbiiSOzQvvg"] .zpimage-container figure img { width:415px ; height:81.38px ; } } [data-element-id="elm_Ksd3MUtFWkCdbiiSOzQvvg"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-center zpimage-size-fit zpimage-tablet-fallback-fit zpimage-mobile-fallback-fit hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/Untitled%20-2-.png" width="415" height="81.38" loading="lazy" size="fit" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_PO-6J9UgKsROQklOzr37lA" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_PO-6J9UgKsROQklOzr37lA"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="color:inherit;font-size:20px;">Bônus: Código completo:</span><br></h2></div>
<div data-element-id="elm_QGzeSNHlNTljCbhEsLUxyw" data-element-type="codeSnippet" class="zpelement zpelem-codesnippet "><div class="zpsnippet-container"><script src="https://cdn.jsdelivr.net/gh/google/code-prettify@master/loader/run_prettify.js"></script><pre style="font-family:monospace;font-size:14px;background-color:rgb(229, 230, 230);"><code class="prettyprint">
#include <stdio.h>
#include <stdint.h>
#include <stddef.h>
#include <string.h>
#include "esp_wifi.h"
#include "esp_system.h"
#include "nvs_flash.h"
#include "esp_event.h"
#include "esp_netif.h"

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/semphr.h"
#include "freertos/queue.h"

#include "lwip/sockets.h"
#include "lwip/dns.h"
#include "lwip/netdb.h"

#include "esp_log.h"
#include "mqtt_client.h"


char *ssid = "Nome canonico da rede wifi";
char *passwd = "senha";

static const char *TAG = "EXEMPLO_MQTT";
int retry_num = 0;

static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data)
{
    esp_mqtt_event_handle_t event = event_data;
    switch ((esp_mqtt_event_id_t)event_id)
    {
    case MQTT_EVENT_CONNECTED:
        ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED");

        char *topico = "testtopic/238191212838";
        char *mensagem = "Olá mundo";

        esp_mqtt_client_publish(handler_args, topico, mensagem, 0, 0 ,0 );
        esp_mqtt_client_subscribe_single(handler_args, topico, 0);

        break;
    case MQTT_EVENT_DISCONNECTED:
        ESP_LOGI(TAG, "MQTT_EVENT_DISCONNECTED");
        break;
    case MQTT_EVENT_SUBSCRIBED:
        break;
    case MQTT_EVENT_UNSUBSCRIBED:
        ESP_LOGI(TAG, "MQTT_EVENT_UNSUBSCRIBED, msg_id=%d", event->msg_id);
        break;
    case MQTT_EVENT_PUBLISHED:
        ESP_LOGI(TAG, "MQTT_EVENT_PUBLISHED, msg_id=%d", event->msg_id);
        break;
    case MQTT_EVENT_DATA:
        ESP_LOGI(TAG, "Dados recebidos: ");
        printf("TOPICO=%.*s\r\n", event->topic_len, event->topic);
        printf("DADOS=%.*s\r\n", event->data_len, event->data);
        break;
    default:
        ESP_LOGI(TAG, "Other event id:%d", event->event_id);
        break;
    }
}

static void mqtt_app_start(void)
{

    esp_mqtt_client_config_t mqtt_cfg = {
        .broker.address.uri = "mqtt://broker.emqx.io:1883",
    };

    esp_mqtt_client_handle_t client = esp_mqtt_client_init(&mqtt_cfg);

    esp_mqtt_client_register_event(client, ESP_EVENT_ANY_ID, mqtt_event_handler, client);
    esp_mqtt_client_start(client);
}

static void wifi_event_handler(void *event_handler_arg, esp_event_base_t event_base, int32_t event_id, void *event_data)
{
    if (event_id == WIFI_EVENT_STA_START)
    {
        ESP_LOGI(TAG, "Tentando conexao wifi....\n");
    }
    else if (event_id == WIFI_EVENT_STA_CONNECTED)
    {
        ESP_LOGI(TAG, "WiFi conenctado");
    }
    else if (event_id == WIFI_EVENT_STA_DISCONNECTED)
    {
        ESP_LOGI(TAG, "WiFi desconectado\n");
        if (retry_num < 5) { esp_wifi_connect(); retry_num++; ESP_LOGI(TAG, "Tentando reconexao wifi...\n"); } } else if (event_id== IP_EVENT_STA_GOT_IP) { ESP_LOGI(TAG, "IP recebido"); //Inicia procedimento de conexão ao MQTT mqtt_app_start(); } } esp_err_t wifi_app_start() { //Inicializa o armazenamento flash (requerido pelo driver de wifi) ESP_ERROR_CHECK(nvs_flash_init()); //Inicializa o sistema Wi-fi e a pilha TCP/IP esp_netif_init(); esp_event_loop_create_default(); esp_netif_create_default_wifi_sta(); wifi_init_config_t wifi_initiation=WIFI_INIT_CONFIG_DEFAULT(); esp_wifi_init(&wifi_initiation); //Registra as funçoes de callback para os eventos de wifi e ip esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, wifi_event_handler, NULL); esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, wifi_event_handler, NULL); //Estrutura de incialização wifi_config_t wifi_configuration={ .sta={ .ssid="" , .password="" , } }; //Faz uma cópia das variaveis globais para dentro da estrutura de inicialização strcpy((char*)wifi_configuration.sta.ssid, ssid); strcpy((char*)wifi_configuration.sta.password, passwd); //Atribui os parametros de inicialização esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_configuration); //Inicializa a conexão esp_wifi_start(); esp_wifi_set_mode(WIFI_MODE_STA); esp_wifi_connect(); return ESP_OK; } void app_main(void) { esp_log_level_set("*", ESP_LOG_NONE); ESP_ERROR_CHECK(wifi_app_start()); }</code></pre></div>
</div><div data-element-id="elm_y0pFy4fLcOziNE1DKQC1ew" data-element-type="divider" class="zpelement zpelem-divider "><style type="text/css"> [data-element-id="elm_y0pFy4fLcOziNE1DKQC1ew"].zpelem-divider{ border-radius:1px; } </style><style></style><div class="zpdivider-container zpdivider-line zpdivider-align-center zpdivider-width100 zpdivider-line-style-solid "><div class="zpdivider-common"></div>
</div></div><div data-element-id="elm_-OmBLlFpdRKT2MTUWG1rFw" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_-OmBLlFpdRKT2MTUWG1rFw"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><div>Sobre o autor:<br></div><div>Matheus desempenha o papel de desenvolvedor de sistemas de tecnologia da informação dentro da equipe da UKTech. Possui&nbsp; experiência no domínio de micro controladores e desenvolvimento de software, e está na reta final de sua graduação em Engenharia de Computação. Em seus momentos de lazer, ele se dedica a interesses como jogos de computador e a apreciação de animes.</div></div></div>
</div><div data-element-id="elm_7IkFOG2J5757SqlW_IjmwQ" data-element-type="divider" class="zpelement zpelem-divider "><style type="text/css"> [data-element-id="elm_7IkFOG2J5757SqlW_IjmwQ"].zpelem-divider{ border-radius:1px; } </style><style></style><div class="zpdivider-container zpdivider-line zpdivider-align-center zpdivider-width100 zpdivider-line-style-solid "><div class="zpdivider-common"></div>
</div></div></div></div></div></div></div> ]]></content:encoded><pubDate>Mon, 29 Jan 2024 16:35:11 -0300</pubDate></item><item><title><![CDATA[ESP-IDF: UART, lendo e escrevendo dados utilizando o conversor serial FT232RL.]]></title><link>https://www.uktech.com.br/bloguk/post/esp-idf-uart-lendo-e-escrevendo-dados-utilizando-o-conversor-serial-ft232rl.</link><description><![CDATA[<img align="left" hspace="5" src="https://www.uktech.com.br/Untitled -27-.png"/>O tutorial de hoje tem como objetivo mostrar como se da a utilização do protocolo UART através da comunicação do ESP32-C3 e o conversor serial FT232RL.]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_xnwpC1heQQ-dfkWM-DZgWA" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_NVYIs1CkR7OxCAYeP8QRcw" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm_R9_I0rSNQAasdPN7V4UkAA" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"> [data-element-id="elm_R9_I0rSNQAasdPN7V4UkAA"].zpelem-col{ border-radius:1px; } </style><div data-element-id="elm_diElpsJ3QK-WZZrGw0Yrrg" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_diElpsJ3QK-WZZrGw0Yrrg"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-center " data-editor="true"><p><span style="color:inherit;">O tutorial de hoje tem como objetivo mostrar como se da a utilização do protocolo <span style="font-weight:600;">UART</span> através da comunicação do <span style="font-weight:600;">ESP32-C3</span> e o conversor serial <span style="font-weight:600;">FT232RL</span>.</span><br></p></div>
</div><div data-element-id="elm_onMeyjZ4jzvL8xRDX-qYZg" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_onMeyjZ4jzvL8xRDX-qYZg"] .zpimage-container figure img { width: 800px ; height: 600.00px ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_onMeyjZ4jzvL8xRDX-qYZg"] .zpimage-container figure img { width:500px ; height:375.00px ; } } @media (max-width: 767px) { [data-element-id="elm_onMeyjZ4jzvL8xRDX-qYZg"] .zpimage-container figure img { width:500px ; height:375.00px ; } } [data-element-id="elm_onMeyjZ4jzvL8xRDX-qYZg"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-center zpimage-size-large zpimage-tablet-fallback-large zpimage-mobile-fallback-large hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/Untitled%20-3-.jpeg" width="500" height="375.00" loading="lazy" size="large" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_7jBVIklEq6fDkwK57CCm6g" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_7jBVIklEq6fDkwK57CCm6g"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><div style="color:inherit;"><h2><span style="font-size:20px;">O que é UART ?</span></h2></div></h2></div>
<div data-element-id="elm_qfRsshswrFrmJN1o154e-g" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_qfRsshswrFrmJN1o154e-g"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;">Um Receptor/Transmissor Assíncrono Universal (<span style="font-weight:600;">UART</span>) é um recurso de comunicação amplamente usado e adotado que utiliza como o nome já diz comunicação assíncrona serial, como por exemplo RS232, RS422, e RS485. <span style="font-weight:600;">UART</span> é um método barato de comunicação que pode ser feito de maneira <span style="font-style:italic;">full-duplex</span> ou <span style="font-style:italic;">half-duplex</span> entre diferentes dispositivos.&nbsp;</span><br></p></div>
</div><div data-element-id="elm_VYK2pMAIuqChbDIUzSLxCQ" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_VYK2pMAIuqChbDIUzSLxCQ"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><div style="color:inherit;"><h2><span style="font-size:20px;">Começando:</span></h2></div></h2></div>
<div data-element-id="elm_tFk_D2DlrwfPBANX-b5vnA" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_tFk_D2DlrwfPBANX-b5vnA"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;">Vamos criar um componente que será responsável pelo <span style="font-weight:600;">UART</span>, dentro de um projeto basta rodar o comando:</span><br></p></div>
</div><div data-element-id="elm_laetZFFror1K0Wy5mRUIDg" data-element-type="codeSnippet" class="zpelement zpelem-codesnippet "><div class="zpsnippet-container"><script src="https://cdn.jsdelivr.net/gh/google/code-prettify@master/loader/run_prettify.js"></script><pre style="font-family:monospace;font-size:14px;background-color:rgb(229, 230, 230);"><code class="prettyprint">
idf.py create-component uart_simple_reader
</code></pre></div>
</div><div data-element-id="elm_VeXERPQPqvoPVkrvPkC-RA" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_VeXERPQPqvoPVkrvPkC-RA"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;">Esse comando criara uma pasta com o nome uart_simple_reader, devemos move-la para dentro de uma pasta chamada <span style="font-style:italic;">components</span> na raiz do projeto, se ela não existir basta criá-la.</span><br></p></div>
</div><div data-element-id="elm_bzoCt7EZpZsBXVqjVICq9Q" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_bzoCt7EZpZsBXVqjVICq9Q"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><div style="color:inherit;"><h2><span style="font-size:20px;">Configurando o componente:</span></h2></div></h2></div>
<div data-element-id="elm_R2QpYpSilOHilGa8v15lKQ" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_R2QpYpSilOHilGa8v15lKQ"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;">Dentro do<span style="font-weight:600;"> CMakeLists.txt</span> desse componente iremos adicionar o parâmetro “REQUIRES driver” para que o mesmo tenha acesso aos recursos responsáveis pelo <span style="font-weight:600;">UART</span> do ESP-IDF, ficando assim:</span><br></p></div>
</div><div data-element-id="elm_fPyrsiF70LPyiFL6jgvl-w" data-element-type="codeSnippet" class="zpelement zpelem-codesnippet "><div class="zpsnippet-container"><script src="https://cdn.jsdelivr.net/gh/google/code-prettify@master/loader/run_prettify.js"></script><pre style="font-family:monospace;font-size:14px;background-color:rgb(229, 230, 230);"><code class="prettyprint">
idf_component_register(SRCS "uart_simple_reader.c"
                    REQUIRES driver
                    INCLUDE_DIRS "include")
</code></pre></div>
</div><div data-element-id="elm_hqai8ObXBonQE5k3E4q4VA" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_hqai8ObXBonQE5k3E4q4VA"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><div style="color:inherit;"><h2><div style="color:inherit;"></div></h2><h2><span style="font-size:20px;">Criando o arquivo de cabeçalho:</span></h2></div></h2></div>
<div data-element-id="elm_gNKTV2K9HED-Ks9bpXgXrQ" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_gNKTV2K9HED-Ks9bpXgXrQ"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><p>Iremos utilizar duas funções para executar as tarefas, uma irá ficar responsável por inicializar o componente e a outra será uma <em>task</em> responsável pela leitura e escrita de fato.</p><p>Além disso iremos definir duas constantes que serão utilizadas mais a frente, ficando assim:</p></div></div>
</div><div data-element-id="elm_WSmehVIoXI7CvE0-XWJUTA" data-element-type="codeSnippet" class="zpelement zpelem-codesnippet "><div class="zpsnippet-container"><script src="https://cdn.jsdelivr.net/gh/google/code-prettify@master/loader/run_prettify.js"></script><pre style="font-family:monospace;font-size:14px;background-color:rgb(229, 230, 230);"><code class="prettyprint">
#include "esp_log.h"
#include "driver/uart.h"
#include "driver/gpio.h"

#define BUF_SIZE (1024)
#define UART_NUM UART_NUM_1

void readUartTask(void *arg);

esp_err_t uartInit(uart_port_t uart_num,
									 uart_config_t *uart_config,
									 int *intr_alloc_flags,
									 gpio_num_t tx_pin, 
									 gpio_num_t rx_pin)
</code></pre></div>
</div><div data-element-id="elm_R1aaHHNAiz_DsnpRiLZ2GA" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_R1aaHHNAiz_DsnpRiLZ2GA"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="color:inherit;font-size:20px;">Implementação:</span><br></h2></div>
<div data-element-id="elm_dTyisAZ8LYDP4gZhpZPgYw" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_dTyisAZ8LYDP4gZhpZPgYw"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><p>Como citado anteriormente a função <strong>uartInit</strong> ficara responsável por receber os parâmetros de inicialização, esses sendo qual o <strong>UART</strong> interno utilizado, parâmetros de funcionamento e os pinos a qual serão atribuídos <strong>TX</strong> e <strong>RX</strong>.</p><p>Já a função <strong>readUartTask</strong> ficara responsável por ler e escrever, recebendo apenas como parâmetro de <em>task</em> a unidade <strong>UART</strong> que estaremos utilizando.</p></div></div>
</div><div data-element-id="elm_jWz6Mvn4JXmKF1UJru90yA" data-element-type="codeSnippet" class="zpelement zpelem-codesnippet "><div class="zpsnippet-container"><script src="https://cdn.jsdelivr.net/gh/google/code-prettify@master/loader/run_prettify.js"></script><pre style="font-family:monospace;font-size:14px;background-color:rgb(229, 230, 230);"><code class="prettyprint">
#include <stdio.h>
#include "uart_simple_reader.h"

void readUartTask(void *arg)
{
    uint8_t *data = (uint8_t *)malloc(BUF_SIZE);

    while (1)
    {
        int len = uart_read_bytes((uart_port_t)arg, data, (BUF_SIZE - 1), pdMS_TO_TICKS(20));
        if (len)
        {
            data[len] = '\0';
            uart_write_bytes((uart_port_t)arg, data, len);
            uart_write_bytes((uart_port_t)arg, "\n", 1);
            ESP_LOGI("TAG", "Recv str: %s", (char *)data);
        }
    }
}

esp_err_t uartInit(uart_port_t uart_num, uart_config_t *uart_config, int *intr_alloc_flags, gpio_num_t tx_pin, gpio_num_t rx_pin)
{   
     uart_config = malloc(sizeof(uart_config_t));
    if (uart_config == NULL) {
        return ESP_FAIL;
    }

    *uart_config = (uart_config_t){
        .baud_rate = 115200,
        .data_bits = UART_DATA_8_BITS,
        .parity = UART_PARITY_DISABLE,
        .stop_bits = UART_STOP_BITS_1,
        .flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
    };

#if CONFIG_UART_ISR_IN_IRAM
    intr_alloc_flags = ESP_INTR_FLAG_IRAM;
#endif

    ESP_ERROR_CHECK(uart_driver_install(uart_num, BUF_SIZE * 2, 0, 0, NULL, *intr_alloc_flags));
    ESP_ERROR_CHECK(uart_param_config(uart_num, uart_config));
    ESP_ERROR_CHECK(uart_set_pin(uart_num, tx_pin, rx_pin, 0, 0));

    return ESP_OK;
}
</code></pre></div>
</div><div data-element-id="elm_o8QZK4lOeF23p2fxGTh-Xw" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_o8QZK4lOeF23p2fxGTh-Xw"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><div style="color:inherit;"><h1><span style="font-size:20px;">Utilizando o componente:</span></h1></div></h2></div>
<div data-element-id="elm_UFyh1u2UBUgdGN0wHd5tmw" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_UFyh1u2UBUgdGN0wHd5tmw"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><div>Primeiramente é necessário declara a utilização do mesmo, dentro da pasta main adicionamos “REQUIRES uart_simple_reader” ao CMakeLists.txt.</div><br><div>Depois importamos o componente dentro do arquivo main, criamos os parâmetros de inicialização e chamamos a função uartInit. Então criamos a task do FreeRTOS e passamos por parâmetro qual UART estamos utilizando.</div></div></div>
</div><div data-element-id="elm_BZ-HXR15nphS0O-z4gRBOQ" data-element-type="codeSnippet" class="zpelement zpelem-codesnippet "><div class="zpsnippet-container"><script src="https://cdn.jsdelivr.net/gh/google/code-prettify@master/loader/run_prettify.js"></script><pre style="font-family:monospace;font-size:14px;background-color:rgb(229, 230, 230);"><code class="prettyprint">
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "sdkconfig.h"
#include "esp_log.h"
#include "uart_simple_reader.h"

void app_main(void)
{
    uart_config_t uart_config;
    int intr_alloc_flags = 0;
    uart_port_t uart_port = UART_NUM;
    gpio_num_t tx = 3;
    gpio_num_t rx = 2;
    ESP_ERROR_CHECK(uartInit(uart_port, 
														&uart_config, 
														&intr_alloc_flags, 
														tx, rx));

    xTaskCreate(readUartTask, "uart_task", 2048, (void *)uart_port, 10, NULL);
}
</code></pre></div>
</div><div data-element-id="elm_Y-7HOJwhuKXO5purly6K-A" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_Y-7HOJwhuKXO5purly6K-A"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><div style="color:inherit;"><h2><strong><span style="font-size:20px;">Acessando o serial:</span></strong></h2></div></h2></div>
<div data-element-id="elm_CPdKL_Mm_PmjuTyeVpsiYw" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_CPdKL_Mm_PmjuTyeVpsiYw"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;">Com o código já rodando no </span>micro controlador<span style="color:inherit;">, estabelecemos uma conexão serial, no caso iremos utilizar o pyseria-miniter, outra alternativa é utilizar o PuTTY.</span><br></p></div>
</div><div data-element-id="elm__MudX1NTem3kn4cUN3lfZA" data-element-type="codeSnippet" class="zpelement zpelem-codesnippet "><div class="zpsnippet-container"><script src="https://cdn.jsdelivr.net/gh/google/code-prettify@master/loader/run_prettify.js"></script><pre style="font-family:monospace;font-size:14px;background-color:rgb(229, 230, 230);"><code class="prettyprint">

pyserial-miniterm /dev/ttyUSB0 115200

</code></pre></div>
</div><div data-element-id="elm_HiyjP6FWEw8yHqVLfxv8Fw" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_HiyjP6FWEw8yHqVLfxv8Fw"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;">Onde enviaremos a string “Olá UART”:</span><br></p></div>
</div><div data-element-id="elm_MqtVCXTcPpEdA-xH2hV2Lw" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_MqtVCXTcPpEdA-xH2hV2Lw"] .zpimage-container figure img { width: 1110px ; height: 345.35px ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_MqtVCXTcPpEdA-xH2hV2Lw"] .zpimage-container figure img { width:723px ; height:224.95px ; } } @media (max-width: 767px) { [data-element-id="elm_MqtVCXTcPpEdA-xH2hV2Lw"] .zpimage-container figure img { width:415px ; height:129.12px ; } } [data-element-id="elm_MqtVCXTcPpEdA-xH2hV2Lw"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-center zpimage-size-fit zpimage-tablet-fallback-fit zpimage-mobile-fallback-fit hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/Untitled%20-26-.png" width="415" height="129.12" loading="lazy" size="fit" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_2LcxorierS_8q-EpgzH92A" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_2LcxorierS_8q-EpgzH92A"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;">Que será mostrada na saída serial padrão do </span>micro controlador<span style="color:inherit;">:</span><br></p></div>
</div><div data-element-id="elm_JollUrLsrFecWNYwpZHDNg" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_JollUrLsrFecWNYwpZHDNg"] .zpimage-container figure img { width: 1110px ; height: 361.94px ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_JollUrLsrFecWNYwpZHDNg"] .zpimage-container figure img { width:723px ; height:235.75px ; } } @media (max-width: 767px) { [data-element-id="elm_JollUrLsrFecWNYwpZHDNg"] .zpimage-container figure img { width:415px ; height:135.32px ; } } [data-element-id="elm_JollUrLsrFecWNYwpZHDNg"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-center zpimage-size-fit zpimage-tablet-fallback-fit zpimage-mobile-fallback-fit hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/Untitled%20-27-.png" width="415" height="135.32" loading="lazy" size="fit" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_qzbSGCSyt3n1pCaWiwV5mQ" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_qzbSGCSyt3n1pCaWiwV5mQ"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><div style="color:inherit;"><h2><span style="font-size:20px;">Exemplo disponível em:</span></h2></div></h2></div>
<div data-element-id="elm_NYR79OE6MfOcZ2_gb8JGwQ" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_NYR79OE6MfOcZ2_gb8JGwQ"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><p><a href="https://github.com/uktechbr/esp-devkit-samples/tree/main/uart-simple">https://github.com/uktechbr/esp-devkit-samples/tree/main/uart-simple</a></p></div></div>
</div><div data-element-id="elm_FJyqVX1-SnkFz8Dqed6ncw" data-element-type="divider" class="zpelement zpelem-divider "><style type="text/css"> [data-element-id="elm_FJyqVX1-SnkFz8Dqed6ncw"].zpelem-divider{ border-radius:1px; } </style><style></style><div class="zpdivider-container zpdivider-line zpdivider-align-center zpdivider-width100 zpdivider-line-style-solid "><div class="zpdivider-common"></div>
</div></div><div data-element-id="elm_3fY6Alk_b88YBIgJSjYLaQ" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_3fY6Alk_b88YBIgJSjYLaQ"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><div>Sobre o autor:<br><br></div><div>Matheus desempenha o papel de desenvolvedor de sistemas de tecnologia da informação dentro da equipe da UKTech. Possui&nbsp; experiência no domínio de micro controladores e desenvolvimento de software, e está na reta final de sua graduação em Engenharia de Computação. Em seus momentos de lazer, ele se dedica a interesses como jogos de computador e a apreciação de animes.</div></div></div>
</div><div data-element-id="elm_hQUM9ikjMpSkYG57z8Lbbw" data-element-type="divider" class="zpelement zpelem-divider "><style type="text/css"> [data-element-id="elm_hQUM9ikjMpSkYG57z8Lbbw"].zpelem-divider{ border-radius:1px; } </style><style></style><div class="zpdivider-container zpdivider-line zpdivider-align-center zpdivider-width100 zpdivider-line-style-solid "><div class="zpdivider-common"></div>
</div></div></div></div></div></div></div> ]]></content:encoded><pubDate>Mon, 11 Dec 2023 11:10:40 -0300</pubDate></item><item><title><![CDATA[ESP-IDF: Publicando componentes para o Espressif IDF Component Registry]]></title><link>https://www.uktech.com.br/bloguk/post/esp-idf-publicando-componentes-para-o-espressif-idf-component-registry</link><description><![CDATA[<img align="left" hspace="5" src="https://www.uktech.com.br/leandra-rieger-GsiX1c51hGs-unsplash.jpg"/>O tutorial de hoje tem como objetivo ensinar a publicar componentes para o novíssimo Espressif IDF Component Registry, esse que tem por objetivo se tornar o padrão para distribuição de componentes dentro da plataforma IDF.]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_QRSsl1y-k3rTRAXc5eGriw" data-element-type="section" class="zpsection zpdefault-section zpdefault-section-bg "><style type="text/css"> [data-element-id="elm_QRSsl1y-k3rTRAXc5eGriw"].zpsection{ border-radius:1px; } </style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_0MLKRMO2cxPWJzQL4qfF7Q" data-element-type="row" class="zprow zprow-container zpalign-items-flex-start zpjustify-content-flex-start zpdefault-section zpdefault-section-bg " data-equal-column=""><style type="text/css"> [data-element-id="elm_0MLKRMO2cxPWJzQL4qfF7Q"].zprow{ border-radius:1px; } </style><div data-element-id="elm_bKHp4lH9Q7jLfX3HPHyrfw" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- zpdefault-section zpdefault-section-bg "><style type="text/css"> [data-element-id="elm_bKHp4lH9Q7jLfX3HPHyrfw"].zpelem-col{ border-radius:1px; } </style><div data-element-id="elm_JV6rMVUI-R6UrK8RZEkyow" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_JV6rMVUI-R6UrK8RZEkyow"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;">O tutorial de hoje tem como objetivo ensinar a publicar componentes para o novíssimo <span style="font-weight:600;"> Espressif IDF Component Registry, </span>esse que tem por objetivo se tornar o padrão para distribuição de componentes dentro da plataforma IDF.</span><br></p></div>
</div><div data-element-id="elm_LJ--EpqJcOW29KxONsKJYg" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_LJ--EpqJcOW29KxONsKJYg"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="color:inherit;">Credenciais:</span></h2></div>
<div data-element-id="elm_LOf4oxVuQHF-3eJ6iYXigg" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_LOf4oxVuQHF-3eJ6iYXigg"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;">O primeiro passo para publicação de um componente é a criação de uma conta no <a href="https://components.espressif.com/users/me">ESP Registry</a>, com a conta criada basta gerar um <span style="font-weight:600;">Token</span> de acesso com permissão de criação de componentes no mesmo.</span><br></p></div>
</div><div data-element-id="elm_Gq6C-GBm0cnMK7HTJfiM2g" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_Gq6C-GBm0cnMK7HTJfiM2g"] .zpimage-container figure img { width: 1110px ; height: 356.16px ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_Gq6C-GBm0cnMK7HTJfiM2g"] .zpimage-container figure img { width:723px ; height:231.99px ; } } @media (max-width: 767px) { [data-element-id="elm_Gq6C-GBm0cnMK7HTJfiM2g"] .zpimage-container figure img { width:415px ; height:133.16px ; } } [data-element-id="elm_Gq6C-GBm0cnMK7HTJfiM2g"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-center zpimage-size-fit zpimage-tablet-fallback-fit zpimage-mobile-fallback-fit hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/Untitled%20-21-.png" width="415" height="133.16" loading="lazy" size="fit" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_UUo7pBtX1hGHc1IFgvTDVw" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_UUo7pBtX1hGHc1IFgvTDVw"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;">Com as credencias agora é necessário criar o arquivo<span style="font-weight:600;"> idf_component_manager.yml </span>dentro da pasta de instalação do IDF (no Linux ~/.espressif/idf_component_manager.yml). Com a seguinte estrutura</span><br></p></div>
</div><div data-element-id="elm_c8U1w6V9RxuPR-mwmJghZg" data-element-type="codeSnippet" class="zpelement zpelem-codesnippet "><div class="zpsnippet-container"> profiles: default: api_token: token default_namespace: meu-namespace </div>
</div><div data-element-id="elm_d2ldaLSxz_GIU5LMxykzgQ" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_d2ldaLSxz_GIU5LMxykzgQ"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><div style="color:inherit;"><h3>Configurar o componente:</h3></div></h2></div>
<div data-element-id="elm_NGs7dia6zenfUrpmOrc7Zg" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_NGs7dia6zenfUrpmOrc7Zg"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div><p style="color:inherit;">As informações da publicação do componente são referentes a um arquivo chamado <strong>idf_component.yml</strong> que deve residir na raiz do projeto. Este contém a informação da versão, descrição, url do repositório remoto do projeto (ex: Github), dependências e a licença do componente.</p><p><span style="font-size:20px;color:rgb(17, 55, 106);">Exemplo:</span></p></div></div>
</div><div data-element-id="elm_13ll3zsDn8g2Sygd7ydlvQ" data-element-type="codeSnippet" class="zpelement zpelem-codesnippet "><div class="zpsnippet-container"> version: "1.0.1" description: Emonlib ESP-IDF url: https://github.com/uktechbr/emonlib-esp-idf dependencies: idf: ">=4.0" license: "AGPL-3.0-only" </div>
</div><div data-element-id="elm_wv09QhXhc8Hw2RTDmD1Y1g" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_wv09QhXhc8Hw2RTDmD1Y1g"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><div style="color:inherit;"><h3>Publicar componente</h3></div></h2></div>
<div data-element-id="elm_22xUdR2g8utDp36wJqOo5g" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_22xUdR2g8utDp36wJqOo5g"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><p>Com todas as etapas anteriores concluídas basta rodar o comando:</p><p><code>compote component upload --namespace [namespace] --name [nome do componente]</code></p></div></div>
</div><div data-element-id="elm_Rpv-ULg2Xp_hR6ADj0Boig" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_Rpv-ULg2Xp_hR6ADj0Boig"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="color:inherit;">Curiosidade:</span></h2></div>
<div data-element-id="elm_os3eFuthBmqXaQAmRHZDBw" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_os3eFuthBmqXaQAmRHZDBw"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;">Primeiro componente publicado pela UKTech:</span><br></p><p><span style="color:inherit;"><br></span></p><p><span style="color:inherit;"><a href="https://components.espressif.com/components/uktech/emonlib-esp-idf">https://components.espressif.com/components/uktech/emonlib-esp-idf</a><br></span></p></div>
</div><div data-element-id="elm_58V50Z49LutTDajW9l4RZA" data-element-type="divider" class="zpelement zpelem-divider "><style type="text/css"> [data-element-id="elm_58V50Z49LutTDajW9l4RZA"].zpelem-divider{ border-radius:1px; } </style><style></style><div class="zpdivider-container zpdivider-line zpdivider-align-center zpdivider-width100 zpdivider-line-style-solid "><div class="zpdivider-common"></div>
</div></div><div data-element-id="elm_4q_l8zR61nPWVyNDFhlJjQ" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_4q_l8zR61nPWVyNDFhlJjQ"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div><div><span style="color:rgb(17, 55, 106);">Sobre o autor:</span><br><br></div><div style="color:inherit;">Matheus desempenha o papel de desenvolvedor de sistemas de tecnologia da informação dentro da equipe da UKTech. Possui&nbsp; experiência no domínio de microcontroladores e desenvolvimento de software, e está na reta final de sua graduação em Engenharia de Computação. Em seus momentos de lazer, ele se dedica a interesses como jogos de computador e a apreciação de animes.</div></div></div>
</div><div data-element-id="elm_5HqcIecejR4SkyRvoc5N2g" data-element-type="divider" class="zpelement zpelem-divider "><style type="text/css"> [data-element-id="elm_5HqcIecejR4SkyRvoc5N2g"].zpelem-divider{ border-radius:1px; } </style><style></style><div class="zpdivider-container zpdivider-line zpdivider-align-center zpdivider-width100 zpdivider-line-style-solid "><div class="zpdivider-common"></div>
</div></div></div></div></div></div></div> ]]></content:encoded><pubDate>Wed, 01 Nov 2023 17:32:52 -0300</pubDate></item><item><title><![CDATA[ESP-IDF: Criando e utilizando componentes]]></title><link>https://www.uktech.com.br/bloguk/post/esp-idf-criando-e-utilizando-componentes</link><description><![CDATA[<img align="left" hspace="5" src="https://www.uktech.com.br/behnam-norouzi-VgN_G9M1zXA-unsplash.jpg"/>Componentes são a base dos projetos feitos no ESP-IDF, eles são uma ótima ferramenta para modularizar, abstrair e reutilizar código.&nbsp; Os component ]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_6eMBZ6WnLp8cwq1RyHzsdw" data-element-type="section" class="zpsection zpdefault-section zpdefault-section-bg "><style type="text/css"> [data-element-id="elm_6eMBZ6WnLp8cwq1RyHzsdw"].zpsection{ border-radius:1px; } </style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_MrR_-o2_gUcMfCLo6rXIbw" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"> [data-element-id="elm_MrR_-o2_gUcMfCLo6rXIbw"].zprow{ border-radius:1px; } </style><div data-element-id="elm_NoxmfklDA2i0EPvA5qAgEg" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- zpdefault-section zpdefault-section-bg "><style type="text/css"> [data-element-id="elm_NoxmfklDA2i0EPvA5qAgEg"].zpelem-col{ border-radius:1px; } </style><div data-element-id="elm_pdop8bE0zi4kP604fDMZZg" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_pdop8bE0zi4kP604fDMZZg"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-center " data-editor="true"><p style="text-align:left;"><span style="color:inherit;">Componentes são a base dos projetos feitos no ESP-IDF, eles são uma ótima ferramenta para modularizar, abstrair e reutilizar código.&nbsp;</span><br></p></div>
</div><div data-element-id="elm_ZPNLNFD3JkZ8KhVAzkCErw" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_ZPNLNFD3JkZ8KhVAzkCErw"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="color:inherit;font-size:20px;">Onde ficam os componentes de um projeto ?</span><br></h2></div>
<div data-element-id="elm_x-PSWbb59XjRwG1oZ3EBew" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_x-PSWbb59XjRwG1oZ3EBew"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;">Os componentes de um projeto por padrão se encontram na pasta <span style="font-style:italic;">components</span> dentro da raiz do mesmo.</span><br></p></div>
</div><div data-element-id="elm__l0cmBNEzAPQuDBDZkl0Zg" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm__l0cmBNEzAPQuDBDZkl0Zg"] .zpimage-container figure img { width: 1110px ; height: 153.39px ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm__l0cmBNEzAPQuDBDZkl0Zg"] .zpimage-container figure img { width:723px ; height:99.91px ; } } @media (max-width: 767px) { [data-element-id="elm__l0cmBNEzAPQuDBDZkl0Zg"] .zpimage-container figure img { width:415px ; height:57.35px ; } } [data-element-id="elm__l0cmBNEzAPQuDBDZkl0Zg"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-center zpimage-size-fit zpimage-tablet-fallback-fit zpimage-mobile-fallback-fit hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/Untitled%20-13-.png" width="415" height="57.35" loading="lazy" size="fit" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_gG5woDGRQQOQKpdH1CTfvw" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_gG5woDGRQQOQKpdH1CTfvw"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="color:inherit;font-size:20px;">Criando um componente:</span><br></h2></div>
<div data-element-id="elm_gYUfSlrlh1QWhoylteObWw" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_gYUfSlrlh1QWhoylteObWw"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;">Basta utilizar o atalho CTRL + SHIFT + P e selecionar o comando <span style="font-weight:600;">ESP-IDF: Create new ESP-IDF Component</span>, em seguida declarar o nome deste novo componente.</span><br></p></div>
</div><div data-element-id="elm_2jumzDThXK79ZVHbEGdr9w" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_2jumzDThXK79ZVHbEGdr9w"] .zpimage-container figure img { width: 601px !important ; height: 448px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_2jumzDThXK79ZVHbEGdr9w"] .zpimage-container figure img { width:601px ; height:448px ; } } @media (max-width: 767px) { [data-element-id="elm_2jumzDThXK79ZVHbEGdr9w"] .zpimage-container figure img { width:601px ; height:448px ; } } [data-element-id="elm_2jumzDThXK79ZVHbEGdr9w"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-center zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/Untitled%20-14-.png" width="601" height="448" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_dvDOnSaCjHATcZlD8Sx_kg" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_dvDOnSaCjHATcZlD8Sx_kg"] .zpimage-container figure img { width: 601px !important ; height: 64px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_dvDOnSaCjHATcZlD8Sx_kg"] .zpimage-container figure img { width:601px ; height:64px ; } } @media (max-width: 767px) { [data-element-id="elm_dvDOnSaCjHATcZlD8Sx_kg"] .zpimage-container figure img { width:601px ; height:64px ; } } [data-element-id="elm_dvDOnSaCjHATcZlD8Sx_kg"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-center zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/Untitled%20-16-.png" width="601" height="64" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_f-981PiKLh8vxWTHhP1WpA" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_f-981PiKLh8vxWTHhP1WpA"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="font-size:20px;">Estrutura de um Componente:</span></h2></div>
<div data-element-id="elm_nhhatUrEgs3HiEbWEguLvA" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_nhhatUrEgs3HiEbWEguLvA"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><div>Por padrão um componente consiste em um pasta include para arquivos de cabeçalho, arquivos de código fonte e um arquivo CMakeLists.txt.</div><br><div>A função do arquivo CMakeLists.txt é justamente declarar essa estrutura, mas não só, ele também é responsável por declarar as dependências externas do componente, como por exemplo a API de log’s do próprio IDF.</div></div></div>
</div><div data-element-id="elm_K7bn7AVZqs3Vphu7hxoB-Q" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_K7bn7AVZqs3Vphu7hxoB-Q"] .zpimage-container figure img { width: 482px !important ; height: 167px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_K7bn7AVZqs3Vphu7hxoB-Q"] .zpimage-container figure img { width:482px ; height:167px ; } } @media (max-width: 767px) { [data-element-id="elm_K7bn7AVZqs3Vphu7hxoB-Q"] .zpimage-container figure img { width:482px ; height:167px ; } } [data-element-id="elm_K7bn7AVZqs3Vphu7hxoB-Q"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-center zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/Untitled%20-17-.png" width="482" height="167" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_kdfPtVvf0xdjmE_jghYuSw" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_kdfPtVvf0xdjmE_jghYuSw"] .zpimage-container figure img { width: 672px !important ; height: 105px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_kdfPtVvf0xdjmE_jghYuSw"] .zpimage-container figure img { width:672px ; height:105px ; } } @media (max-width: 767px) { [data-element-id="elm_kdfPtVvf0xdjmE_jghYuSw"] .zpimage-container figure img { width:672px ; height:105px ; } } [data-element-id="elm_kdfPtVvf0xdjmE_jghYuSw"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-center zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/Untitled%20-18-.png" width="672" height="105" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_xrbBGgLNpCKD9p9WpvE9Og" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_xrbBGgLNpCKD9p9WpvE9Og"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="color:inherit;font-size:20px;">Usando um componente:</span><br></h2></div>
<div data-element-id="elm_3ip2gCmndhzffXE9LDssig" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_3ip2gCmndhzffXE9LDssig"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;">Vamos tomar como exemplo um componente <span style="font-weight:600;">hello </span>que tem como função imprimir um log na saída serial do microcontrolador, o nome dessa função também sera hello, basta incluir o arquivo de cabeçalho na função main.</span><br></p></div>
</div><div data-element-id="elm_TiZ_jh2acSHQbAFCPSFDRA" data-element-type="codeSnippet" class="zpelement zpelem-codesnippet "><div class="zpsnippet-container"><script src="https://gist.github.com/MatheusReichert/269b6a3557583ec516ae7bb8d46af69d.js"></script></div>
</div><div data-element-id="elm_woHJ6aKBmrQ6iRgHSpPL8w" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_woHJ6aKBmrQ6iRgHSpPL8w"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;"><span style="font-size:20px;">E declarar a dependência no arquivo CMakeLists.txt da pasta main.</span></span><br></p></div>
</div><div data-element-id="elm_ViExekmBqeJk8aSt3ejnEg" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_ViExekmBqeJk8aSt3ejnEg"] .zpimage-container figure img { width: 672px !important ; height: 105px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_ViExekmBqeJk8aSt3ejnEg"] .zpimage-container figure img { width:672px ; height:105px ; } } @media (max-width: 767px) { [data-element-id="elm_ViExekmBqeJk8aSt3ejnEg"] .zpimage-container figure img { width:672px ; height:105px ; } } [data-element-id="elm_ViExekmBqeJk8aSt3ejnEg"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-center zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/Untitled%20-18-.png" width="672" height="105" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_JRJkkOs7wsynczAWEW0ObQ" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_JRJkkOs7wsynczAWEW0ObQ"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="font-size:20px;">Resultado rodando no micro controlador</span></h2></div>
<div data-element-id="elm_bEplG3C8RAHGnghPQeD5ig" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_bEplG3C8RAHGnghPQeD5ig"] .zpimage-container figure img { width: 1110px ; height: 255.20px ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_bEplG3C8RAHGnghPQeD5ig"] .zpimage-container figure img { width:723px ; height:166.22px ; } } @media (max-width: 767px) { [data-element-id="elm_bEplG3C8RAHGnghPQeD5ig"] .zpimage-container figure img { width:415px ; height:95.41px ; } } [data-element-id="elm_bEplG3C8RAHGnghPQeD5ig"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-center zpimage-size-fit zpimage-tablet-fallback-fit zpimage-mobile-fallback-fit hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/Untitled%20-20-.png" width="415" height="95.41" loading="lazy" size="fit" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_Z2d51LZch8G0Rdb795t-uA" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_Z2d51LZch8G0Rdb795t-uA"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="color:inherit;font-size:20px;">Código fonte deste tutorial disponível na pasta hello-component em:</span><br></h2></div>
<div data-element-id="elm_S-irVNIIrsrnOrWIp0bVsg" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_S-irVNIIrsrnOrWIp0bVsg"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><a href="https://github.com/uktechbr/esp-devkit-samples/">https://github.com/uktechbr/esp-devkit-samples/</a><br></p></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Wed, 25 Oct 2023 15:47:07 -0300</pubDate></item><item><title><![CDATA[Utilizando o ESP32-C3 em conjunto com o sensor BME680e a Arduíno IDE]]></title><link>https://www.uktech.com.br/bloguk/post/utilizando-o-esp32-c3-em-conjunto-com-o-sensor-bme680e-a-arduíno-ide</link><description><![CDATA[<img align="left" hspace="5" src="https://www.uktech.com.br/getty-images-CCjYIrjpYvM-unsplash.jpg"/>No tutorial de hoje vamos mostrar como usar o ESP32-C3 em conjunto com o sensor BME680 para medir temperatura, umidade, pressão e VOC (Composto orgâni ]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_Srg3otbJSauSPUjDjMWe8g" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_EN_OefMoQBSUi4QmBd37kA" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm_FvHKve1qQpyvQM8K07AbyA" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"></style><div data-element-id="elm_nLqn6s_zTz2d71y6qTrplA" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-center " data-editor="true"><p style="text-align:left;"><span style="color:inherit;">No tutorial de hoje vamos mostrar como usar o ESP32-C3 em conjunto com o sensor BME680 para medir temperatura, umidade, pressão e VOC (Composto orgânico volátil), também vamos mostrar essas informações em um display OLED.</span><br/></p></div>
</div><div data-element-id="elm_8iClLPrd0JtIbmokag7h7w" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_8iClLPrd0JtIbmokag7h7w"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="color:inherit;font-size:20px;">Materiais utilizados:</span><br/></h2></div>
<div data-element-id="elm_6AmRqsbODvJoaFK-KKOkyg" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_6AmRqsbODvJoaFK-KKOkyg"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><ol><li><span style="color:inherit;">ESP32-C3 (UKT-ESP32C3-DEV-MINI-USB)</span></li><li><span style="color:inherit;">BME680&nbsp;</span></li><li><span style="color:inherit;">Display LCD (128x32)&nbsp;<br/></span></li><li><span style="color:inherit;">Jumpers ou fios</span></li></ol></div>
</div><div data-element-id="elm_KAh5y2q8Q4CO9WbA405FQw" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_KAh5y2q8Q4CO9WbA405FQw"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="color:inherit;"><span style="font-size:20px;">Esquemático</span>:</span><br/></h2></div>
<div data-element-id="elm_HopaNaHLTpqw3pYPd8ywvg" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_HopaNaHLTpqw3pYPd8ywvg"] .zpimage-container figure img { width: 962px ; height: 633.75px ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_HopaNaHLTpqw3pYPd8ywvg"] .zpimage-container figure img { width:723px ; height:476.30px ; } } @media (max-width: 767px) { [data-element-id="elm_HopaNaHLTpqw3pYPd8ywvg"] .zpimage-container figure img { width:415px ; height:273.40px ; } } [data-element-id="elm_HopaNaHLTpqw3pYPd8ywvg"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-center zpimage-tablet-align-center zpimage-mobile-align-center zpimage-size-fit zpimage-tablet-fallback-fit zpimage-mobile-fallback-fit hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/3.esquema.png" width="415" height="273.40" loading="lazy" size="fit" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_M4z92bvvuvhixWc2_bgpjQ" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_M4z92bvvuvhixWc2_bgpjQ"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="color:inherit;font-size:20px;">Bibliotecas Arduíno utilizadas:</span><br/></h2></div>
<div data-element-id="elm_ekbT7TFVGW3FTd6e0oM0WQ" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_ekbT7TFVGW3FTd6e0oM0WQ"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><ul><li><span style="color:inherit;">BME680 by Adafruit&nbsp;</span></li><li><span style="color:inherit;">SSD1306 by Adafruit&nbsp;</span></li></ul><p><span style="color:inherit;">E dependências das respectivas bibliotecas acima.</span><br/></p></div>
</div><div data-element-id="elm_Hz_6E4QRKAPBqRH9njImfg" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_Hz_6E4QRKAPBqRH9njImfg"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="color:inherit;font-size:20px;">Seleção da placa na Arduíno IDE:&nbsp;</span><br/></h2></div>
<div data-element-id="elm_8nlACJjNwIQlFm6GSuJsKw" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_8nlACJjNwIQlFm6GSuJsKw"] .zpimage-container figure img { width: 277px !important ; height: 51px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_8nlACJjNwIQlFm6GSuJsKw"] .zpimage-container figure img { width:277px ; height:51px ; } } @media (max-width: 767px) { [data-element-id="elm_8nlACJjNwIQlFm6GSuJsKw"] .zpimage-container figure img { width:277px ; height:51px ; } } [data-element-id="elm_8nlACJjNwIQlFm6GSuJsKw"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-tablet-align-left zpimage-mobile-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/2023-09-18-14-53-23-Captura%20de%20tela%20de%202023-09-18%2014-53-18.png" width="277" height="51" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_9r-ZGcQ6uW0eV8xzil1tmw" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_9r-ZGcQ6uW0eV8xzil1tmw"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;">Selecionamos o módulo ESP32C3.</span><br/></p></div>
</div><div data-element-id="elm_ePUST2HSmHGR9ByV1Wc76Q" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_ePUST2HSmHGR9ByV1Wc76Q"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="color:inherit;font-size:20px;">Código:</span><br/></h2></div>
<div data-element-id="elm_86Ej6H-V7UKSVDy-653BGw" data-element-type="codeSnippet" class="zpelement zpelem-codesnippet "><div class="zpsnippet-container"><pre><code class="fenced-code-block language-arduino"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">"Adafruit_SSD1306.h"</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">"Adafruit_BME680.h"</span></span>

<span class="token comment">// Define o tamanho do display OLED</span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">SCREEN_WIDTH</span> <span class="token expression"><span class="token number">128</span></span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">SCREEN_HEIGHT</span> <span class="token expression"><span class="token number">32</span></span></span>

<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">SEALEVELPRESSURE_HPA</span> <span class="token expression"><span class="token punctuation">(</span><span class="token number">1013.25</span><span class="token punctuation">)</span></span></span>

<span class="token comment">// Inidicaliza o sensor e o display</span>
Adafruit_BME680 bme<span class="token punctuation">;</span>
Adafruit_SSD1306 <span class="token function">display</span><span class="token punctuation">(</span>SCREEN_WIDTH<span class="token punctuation">,</span> SCREEN_HEIGHT<span class="token punctuation">,</span> <span class="token operator">&amp;</span><span class="token builtin">Wire</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token keyword">void</span> <span class="token keyword">setup</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token comment">//Velocidade do monitor serial</span>
  <span class="token builtin">Serial</span><span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span><span class="token number">115200</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token comment">// Pinos do barramento I2C</span>
  <span class="token builtin">Wire</span><span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

   <span class="token comment">// Verifica estado de inicialização do display, acusa falha em caso de erro</span>
  <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span><span class="token builtin">display</span><span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span>SSD1306_SWITCHCAPVCC<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token boolean">false</span><span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token builtin">Serial</span><span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token function">F</span><span class="token punctuation">(</span><span class="token string">"Falha ao inicializar o SSD1306"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token punctuation">;</span><span class="token punctuation">;</span><span class="token punctuation">)</span>
      <span class="token punctuation">;</span>
  <span class="token punctuation">}</span>

  <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>bme<span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token builtin">Serial</span><span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token function">F</span><span class="token punctuation">(</span><span class="token string">"Could not find a valid BME680 sensor, check wiring!"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token punctuation">}</span>

  <span class="token comment">// Ajusta os filtros da biblioteca do sensor</span>
  bme<span class="token punctuation">.</span><span class="token function">setTemperatureOversampling</span><span class="token punctuation">(</span>BME680_OS_8X<span class="token punctuation">)</span><span class="token punctuation">;</span>
  bme<span class="token punctuation">.</span><span class="token function">setHumidityOversampling</span><span class="token punctuation">(</span>BME680_OS_2X<span class="token punctuation">)</span><span class="token punctuation">;</span>
  bme<span class="token punctuation">.</span><span class="token function">setPressureOversampling</span><span class="token punctuation">(</span>BME680_OS_4X<span class="token punctuation">)</span><span class="token punctuation">;</span>
  bme<span class="token punctuation">.</span><span class="token function">setIIRFilterSize</span><span class="token punctuation">(</span>BME680_FILTER_SIZE_3<span class="token punctuation">)</span><span class="token punctuation">;</span>
  bme<span class="token punctuation">.</span><span class="token function">setGasHeater</span><span class="token punctuation">(</span><span class="token number">320</span><span class="token punctuation">,</span> <span class="token number">150</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 320*C for 150 ms</span>

  <span class="token comment">// Limpe o buffer do display</span>
  <span class="token builtin">display</span><span class="token punctuation">.</span><span class="token function">clearDisplay</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

  <span class="token comment">// Configuração do texto</span>
  <span class="token builtin">display</span><span class="token punctuation">.</span><span class="token function">setTextSize</span><span class="token punctuation">(</span><span class="token number">1.5</span><span class="token punctuation">)</span><span class="token punctuation">;</span>             <span class="token comment">// Tamanho do texto (1 = 6x8 pixels)</span>
  <span class="token builtin">display</span><span class="token punctuation">.</span><span class="token function">setTextColor</span><span class="token punctuation">(</span>SSD1306_WHITE<span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token comment">// Cor do texto</span>
<span class="token punctuation">}</span>

<span class="token keyword">void</span> <span class="token keyword">loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token comment">// Tempo entre cada medida</span>
  <span class="token function">delay</span><span class="token punctuation">(</span><span class="token number">2000</span><span class="token punctuation">)</span><span class="token punctuation">;</span>


  <span class="token comment">// BME680 inicia o processo de amostragem</span>
  unsigned <span class="token keyword">long</span> endTime <span class="token operator">=</span> bme<span class="token punctuation">.</span><span class="token function">beginReading</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token keyword">if</span> <span class="token punctuation">(</span>endTime <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token builtin">Serial</span><span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token function">F</span><span class="token punctuation">(</span><span class="token string">"Falha ao obter medicao"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">return</span><span class="token punctuation">;</span>
  <span class="token punctuation">}</span>
  <span class="token builtin">Serial</span><span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span><span class="token function">F</span><span class="token punctuation">(</span><span class="token string">"Medicao comecou em: "</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token builtin">Serial</span><span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span><span class="token function">millis</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token builtin">Serial</span><span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span><span class="token function">F</span><span class="token punctuation">(</span><span class="token string">" e terminou em "</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token builtin">Serial</span><span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>endTime<span class="token punctuation">)</span><span class="token punctuation">;</span>

  <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>bme<span class="token punctuation">.</span><span class="token function">endReading</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token builtin">Serial</span><span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token function">F</span><span class="token punctuation">(</span><span class="token string">"Falha com completar medicao"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">return</span><span class="token punctuation">;</span>
  <span class="token punctuation">}</span>

  <span class="token builtin">Serial</span><span class="token punctuation">.</span><span class=</div>
	</div>




            

          
    


    
        


  

      
      
      

      
        
      
      
      

      
  
          

              


  











<div data-element-id="elm_K0NDm-NRp--Yj-ImfmoM6A" data-element-type="heading" class="zpelement zpelem-heading ">


  

  

  

  

  
  
  

  

  


  
  

  
  

  

  

  

  
  
  

	<style>
  
    
    
      [data-element-id="elm_K0NDm-NRp--Yj-ImfmoM6A"].zpelem-heading {
      	 border-radius:1px;
      }
    
    
  

  

  
  </style>
  
  <h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="font-size:20px;">Resultado:</span></h2>
</div>



          
    


    
        


  

      
      
      

      
        
      
      
      

      
  
          

              
    



    


<div data-element-id="elm_yosqX4uqDtAldoDUlTJWdw" data-element-type="image" class="zpelement zpelem-image ">

























    

<style>

@media (min-width: 992px) {
  [data-element-id="elm_yosqX4uqDtAldoDUlTJWdw"] .zpimage-container figure img {
        width: 900px   !important ;
        height: 908px  !important ;
  }
}



    @media (max-width: 991px) and (min-width: 768px) {
      [data-element-id="elm_yosqX4uqDtAldoDUlTJWdw"] .zpimage-container figure img {
        width:900px ;
        height:908px ;
      }
    }



    @media (max-width: 767px) {
      [data-element-id="elm_yosqX4uqDtAldoDUlTJWdw"] .zpimage-container figure img {
        width:900px ;
        height:908px ;
      }
    }



    
    
    
    [data-element-id="elm_yosqX4uqDtAldoDUlTJWdw"].zpelem-image {
        border-radius:1px;
    }
    





</style>

  <div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-center zpimage-tablet-align-center zpimage-mobile-align-center zpimage-size-original zpimage-tablet-fallback-fit zpimage-mobile-fallback-fit hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark">
        <figure role="none" class="zpimage-data-ref">
        
          <span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;">
          
          <picture>

            
            
            <img class="zpimage zpimage-style-none zpimage-space-none " src="/3.final.jpeg" width="900" height="908" loading="lazy" size="original" data-lightbox="true"/>
          </picture>
        
          </span>
          
      
    </figure>
  </div>

</div>


          
    


    
        


  

      
      
      

      
        
      
      
      

      
  
          

            <div data-element-id="elm_B9ZShV7BQZeruF5QR1G4LA" data-element-type="divider" class="zpelement zpelem-divider ">

    

    

    

    

    

    

    
      <style type="text/css">
    
        [data-element-id="elm_B9ZShV7BQZeruF5QR1G4LA"].zpelem-divider{
            border-radius:1px;
        }
    
    
    
    </style>
    <style>
    
    </style>
    
    <div class="zpdivider-container zpdivider-line zpdivider-align-center zpdivider-width100 zpdivider-line-style-solid ">
      <div class="zpdivider-common"></div>

    </div>
</div>


          
    


    
        


  

      
      
      

      
        
      
      
      

      
  
          

              


  










<div data-element-id="elm_JnwGxOo4e3Y2-MiWs1Cf3g" data-element-type="text" class="zpelement zpelem-text ">





 

 

  

  











<style>

    [data-element-id="elm_JnwGxOo4e3Y2-MiWs1Cf3g"].zpelem-text {
        border-radius:1px;
    }
    



</style>


    <div class="zptext zptext-align-left " data-editor="true"><p><span style="color:rgb(49, 188, 173);font-size:18px;">Sobre o autor:</span></p><p><span style="color:inherit;">Matheus desempenha o papel de desenvolvedor de sistemas de tecnologia da informação dentro da equipe da UKTech. Possui&nbsp; experiência no domínio de microcontroladores e desenvolvimento de software, e está na reta final de sua graduação em Engenharia de Computação. Em seus momentos de lazer, ele se dedica a interesses como jogos de computador e a apreciação de animes.</span><br/></p></div>

</div>


          
    


    
    
</div>


          
    


    

</div>


          
    


  
</div>


















































</div>


           
    


    

</div>


















]]></content:encoded>
				<pubDate>Mon, 02 Oct 2023 14:19:42 -0300</pubDate>
			</item>
		
			<item>
				<title><![CDATA[Utilizando o ESP32-C3 em conjunto com o sensor de luz ultravioleta ML8511 e a Arduíno IDE]]></title>
				<link>https://www.uktech.com.br/bloguk/post/utilizando-o-esp32-c3-em-conjunto-com-o-sensor-de-luzultravioleta-ml8511-e-a-arduíno-ide</link>
				<description><![CDATA[<img align="left" hspace="5" src="https://www.uktech.com.br/images/photo-1635280145597-3eb75459ee55"/>Crie projetos com o ESP32-C3 em conjunto com o sensor ML8511 para medir a luminosidade no espectro ultravioleta e mostrar essas informações em um display OLED.]]></description>
				<content:encoded><![CDATA[<div class="zpcontent-container blogpost-container ">
    
    
      


  

      
      
      

      
        
      
      
      

      
  
          

              
                  
                      
                      
                              
              

              







































    






<div data-element-id="elm_wDuwbGK932g4olQbmuIykQ" data-element-type="section" class="zpsection zpdefault-section zpdefault-section-bg ">











<style type="text/css">





</style>




<div class="zpcontainer-fluid zpcontainer">
  
  


  

      
      
      

      
        
      
      
      

      
  
          

              
<div data-element-id="elm_afUrrxdQaj5JR0_DItBh6g" data-element-type="row" class="zprow zprow-container zpalign-items-flex-start zpjustify-content-flex-start " data-equal-column="">















<style type="text/css">



</style>
    
        


  

      
      
      

      
        
      
      
      

      
  
          

              









<div data-element-id="elm_x78zbcjv29_vjfy7XNB9Aw" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- zpdefault-section zpdefault-section-bg ">
    

    
    


    
    


    

    

    

    
    
      <style type="text/css">
        
        
        
        
      </style>
    
    
    
        


  

      
      
      

      
        
      
      
      

      
  
          

              
    



    


<div data-element-id="elm_St04_W-2aI1zML9qxRoTDQ" data-element-type="image" class="zpelement zpelem-image ">

























    

<style>

@media (min-width: 992px) {
  [data-element-id="elm_St04_W-2aI1zML9qxRoTDQ"] .zpimage-container figure img {
        width: 1110px  ;
        height: 628.26px ;
  }
}



    @media (max-width: 991px) and (min-width: 768px) {
      [data-element-id="elm_St04_W-2aI1zML9qxRoTDQ"] .zpimage-container figure img {
        width:723px ;
        height:409.22px ;
      }
    }



    @media (max-width: 767px) {
      [data-element-id="elm_St04_W-2aI1zML9qxRoTDQ"] .zpimage-container figure img {
        width:415px ;
        height:234.89px ;
      }
    }



    
    
    
    [data-element-id="elm_St04_W-2aI1zML9qxRoTDQ"].zpelem-image {
        border-radius:1px;
    }
    





</style>

  <div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-center zpimage-tablet-align-center zpimage-mobile-align-center zpimage-size-fit zpimage-tablet-fallback-fit zpimage-mobile-fallback-fit ">
        <figure role="none" class="zpimage-data-ref">
        
          <span class="zpimage-anchor">
          
          <picture>

            
            
            <img class="zpimage zpimage-style-none zpimage-space-none " src="/images/photo-1635280145597-3eb75459ee55" width="415" height="234.89" loading="lazy" size="fit"/>
          </picture>
        
          </span>
          
      
    </figure>
  </div>

</div>


          
    


    
    
</div>


          
    


    

</div>


          
    


  
</div>


















































</div>


           
    


    
      


  

      
      
      

      
        
      
      
      

      
  
          

              
                  
                      
                      
                              
              

              












































<div data-element-id="elm_nH7IBjnxQJSL1YQ_n4Y61A" data-element-type="section" class="zpsection ">











<style type="text/css">





</style>




<div class="zpcontainer-fluid zpcontainer">
  
  


  

      
      
      

      
        
      
      
      

      
  
          

              
<div data-element-id="elm_tap_zgfCTGeL-JW7fgrhYw" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column="">















<style type="text/css">



</style>
    
        


  

      
      
      

      
        
      
      
      

      
  
          

              









<div data-element-id="elm_LAJ4-P29RsazLZC7lLIxuA" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- ">
    

    
    


    
    


    

    

    

    
    
      <style type="text/css">
        
          [data-element-id="elm_LAJ4-P29RsazLZC7lLIxuA"].zpelem-col{
              border-radius:1px;
          }
        
        
        
        
      </style>
    
    
    
        


  

      
      
      

      
        
      
      
      

      
  
          

              


  





  





  


<div data-element-id="elm_IwDCegfZTkyBQYIc3yOcHg" data-element-type="text" class="zpelement zpelem-text ">





 

 

  

  











<style>

    [data-element-id="elm_IwDCegfZTkyBQYIc3yOcHg"].zpelem-text {
        border-radius:1px;
    }
    



</style>


    <div class="zptext zptext-align-center " data-editor="true"><p style="text-align:left;"><span style="color:inherit;">No tutorial de hoje, vamos mostrar como usar o ESP32-C3 em conjunto com o sensor ML8511 para luminosidade no espectro ultravioleta, também vamos mostrar essas informações em um display OLED.</span><br/></p><p style="text-align:left;"><span style="color:inherit;"><br/></span></p><div><div><div><p style="text-align:left;"><span style="font-family:verdana, sans-serif;color:rgb(49, 188, 173);font-size:20px;">Materiais utilizados:&nbsp;</span></p><ul><li style="text-align:left;">ESP32-C3 (UKT-ESP32C3-DEV-MINI-USB)<br/></li><li style="color:inherit;text-align:left;"><span style="color:inherit;">ML8511&nbsp;</span><br/></li><li style="color:inherit;text-align:left;"><span style="color:inherit;">Display LCD (128x32)</span></li><li style="color:inherit;text-align:left;">Jumpers ou fios</li></ul></div></div><div style="color:inherit;"><h2 style="text-align:left;"><span style="font-size:20px;">Esquemático:</span></h2></div></div></div>

</div>


          
    


    
        


  

      
      
      

      
        
      
      
      

      
  
          

              
    



    


<div data-element-id="elm_tmNN9MFAIv10mlHAcsfWTw" data-element-type="image" class="zpelement zpelem-image ">

























    

<style>

@media (min-width: 992px) {
  [data-element-id="elm_tmNN9MFAIv10mlHAcsfWTw"] .zpimage-container figure img {
        width: 500px  ;
        height: 375.00px ;
  }
}



    @media (max-width: 991px) and (min-width: 768px) {
      [data-element-id="elm_tmNN9MFAIv10mlHAcsfWTw"] .zpimage-container figure img {
        width:500px ;
        height:375.00px ;
      }
    }



    @media (max-width: 767px) {
      [data-element-id="elm_tmNN9MFAIv10mlHAcsfWTw"] .zpimage-container figure img {
        width:500px ;
        height:375.00px ;
      }
    }



    
    
    
    [data-element-id="elm_tmNN9MFAIv10mlHAcsfWTw"].zpelem-image {
        border-radius:1px;
    }
    





</style>

  <div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-tablet-align-left zpimage-mobile-align-left zpimage-size-medium zpimage-tablet-fallback-medium zpimage-mobile-fallback-medium hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark">
        <figure role="none" class="zpimage-data-ref">
        
          <span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;">
          
          <picture>

            
            
            <img class="zpimage zpimage-style-none zpimage-space-none " src="/Utilizando%20o%20ESP32-C3%20em%20conjunto%20com%20o%20sensor%20ml-1-.png" width="500" height="375.00" loading="lazy" size="medium" data-lightbox="true"/>
          </picture>
        
          </span>
          
      
    </figure>
  </div>

</div>


          
    


    
        


  

      
      
      

      
        
      
      
      

      
  
          

              


  










<div data-element-id="elm_A0_p-rE00McDIH3qkA1vXQ" data-element-type="text" class="zpelement zpelem-text ">





 

 

  

  











<style>

    [data-element-id="elm_A0_p-rE00McDIH3qkA1vXQ"].zpelem-text {
        border-radius:1px;
    }
    



</style>


    <div class="zptext zptext-align-left " data-editor="true"><p><span style="font-family:verdana, sans-serif;color:rgb(49, 188, 173);font-size:20px;">Bibliotecas Arduíno utilizadas:&nbsp;</span></p><ul><li><span style="color:inherit;">ML8511 by RobTillaart&nbsp;</span></li><li><span style="color:inherit;">SSD1306 by Adafruit</span></li></ul><div><br/></div><div><span style="color:inherit;">E dependências das respectivas bibliotecas acima.</span><br/></div></div>

</div>


          
    


    
        


  

      
      
      

      
        
      
      
      

      
  
          

              


  











<div data-element-id="elm_zAx3EBPOsVKPQAJUiMw6jA" data-element-type="heading" class="zpelement zpelem-heading ">


  

  

  

  

  
  
  

  

  


  
  

  
  

  

  

  

  
  
  

	<style>
  
    
    
      [data-element-id="elm_zAx3EBPOsVKPQAJUiMw6jA"].zpelem-heading {
      	 border-radius:1px;
	



    
  

      
  

    

        


    
      
    


    
      margin-block-start:-3px;
      }
    
    
  

  

  
  </style>
  
  <h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="color:inherit;font-size:20px;">Seleção da placa na Arduíno IDE:</span><br/></h2>
</div>



          
    


    
        


  

      
      
      

      
        
      
      
      

      
  
          

              
    



    


<div data-element-id="elm_XsGPIGU9-hYQQ29mUXL0nQ" data-element-type="image" class="zpelement zpelem-image ">

























    

<style>

@media (min-width: 992px) {
  [data-element-id="elm_XsGPIGU9-hYQQ29mUXL0nQ"] .zpimage-container figure img {
        width: 277px   !important ;
        height: 51px  !important ;
  }
}



    @media (max-width: 991px) and (min-width: 768px) {
      [data-element-id="elm_XsGPIGU9-hYQQ29mUXL0nQ"] .zpimage-container figure img {
        width:277px ;
        height:51px ;
      }
    }



    @media (max-width: 767px) {
      [data-element-id="elm_XsGPIGU9-hYQQ29mUXL0nQ"] .zpimage-container figure img {
        width:277px ;
        height:51px ;
      }
    }



    
    
    
    [data-element-id="elm_XsGPIGU9-hYQQ29mUXL0nQ"].zpelem-image {
        border-radius:1px;
    }
    





</style>

  <div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-tablet-align-left zpimage-mobile-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark">
        <figure role="none" class="zpimage-data-ref">
        
          <span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;">
          
          <picture>

            
            
            <img class="zpimage zpimage-style-none zpimage-space-none " src="/2023-09-18-14-53-23-Captura%20de%20tela%20de%202023-09-18%2014-53-18.png" width="277" height="51" loading="lazy" size="original" data-lightbox="true"/>
          </picture>
        
          </span>
          
      
    </figure>
  </div>

</div>


          
    


    
        


  

      
      
      

      
        
      
      
      

      
  
          

              


  










<div data-element-id="elm_dVdRCBk7I0-rYGu7kWgpXg" data-element-type="text" class="zpelement zpelem-text ">





 

 

  

  











<style>

    [data-element-id="elm_dVdRCBk7I0-rYGu7kWgpXg"].zpelem-text {
        border-radius:1px;
    }
    



</style>


    <div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;">Selecionamos o módulo ESP32C3.</span><br/></p></div>

</div>


          
    


    
        


  

      
      
      

      
        
      
      
      

      
  
          

              


  











<div data-element-id="elm_3wpLV_MtYt5510wVR1wFig" data-element-type="heading" class="zpelement zpelem-heading ">


  

  

  

  

  
  
  

  

  


  
  

  
  

  

  

  

  
  
  

	<style>
  
    
    
      [data-element-id="elm_3wpLV_MtYt5510wVR1wFig"].zpelem-heading {
      	 border-radius:1px;
      }
    
    
  

  

  
  </style>
  
  <h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="font-size:20px;">Código:</span></h2>
</div>



          
    


    
        


  

      
      
      

      
        
      
      
      

      
  
          
            

              

	<div data-element-id="elm_Qds91ejClcv6yLAt2gVt8A" data-element-type="codeSnippet" class="zpelement zpelem-codesnippet ">
	 	<div class="zpsnippet-container">
			
				<pre><code class="fenced-code-block language-arduino"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">"Adafruit_SSD1306.h"</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;ML8511.h&gt;</span></span>

<span class="token comment">// Define o tamanho do display OLED</span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">SCREEN_WIDTH</span> <span class="token expression"><span class="token number">128</span></span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">SCREEN_HEIGHT</span> <span class="token expression"><span class="token number">32</span></span></span>

<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">ANALOGPIN</span> <span class="token expression"><span class="token number">0</span></span></span>
ML8511 <span class="token function">ml</span><span class="token punctuation">(</span>ANALOGPIN<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// Inidicaliza o sensor e o display</span>
Adafruit_SSD1306 <span class="token function">display</span><span class="token punctuation">(</span>SCREEN_WIDTH<span class="token punctuation">,</span> SCREEN_HEIGHT<span class="token punctuation">,</span> <span class="token operator">&amp;</span><span class="token builtin">Wire</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token keyword">void</span> <span class="token keyword">setup</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token comment">//Velocidade do monitor serial</span>
  <span class="token builtin">Serial</span><span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span><span class="token number">115200</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token comment">// Pinos do barramento I2C</span>
  <span class="token builtin">Wire</span><span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

   <span class="token comment">// Verifica estado de inicialização do display, acusa falha em caso de erro</span>
  <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span><span class="token builtin">display</span><span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span>SSD1306_SWITCHCAPVCC<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token boolean">false</span><span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token builtin">Serial</span><span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token function">F</span><span class="token punctuation">(</span><span class="token string">"Falha ao inicializar o SSD1306"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token punctuation">}</span>
  <span class="token comment">//Parametros da tensão de operação do sensor e do adc</span>
  ml<span class="token punctuation">.</span><span class="token function">setVoltsPerStep</span><span class="token punctuation">(</span><span class="token number">3.3</span><span class="token punctuation">,</span> <span class="token number">4096</span><span class="token punctuation">)</span><span class="token punctuation">;</span>   

  <span class="token comment">// Limpe o buffer do display</span>
  <span class="token builtin">display</span><span class="token punctuation">.</span><span class="token function">clearDisplay</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

  <span class="token comment">// Configuração do texto</span>
  <span class="token builtin">display</span><span class="token punctuation">.</span><span class="token function">setTextSize</span><span class="token punctuation">(</span><span class="token number">1.5</span><span class="token punctuation">)</span><span class="token punctuation">;</span>             <span class="token comment">// Tamanho do texto (1 = 6x8 pixels)</span>
  <span class="token builtin">display</span><span class="token punctuation">.</span><span class="token function">setTextColor</span><span class="token punctuation">(</span>SSD1306_WHITE<span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token comment">// Cor do texto</span>
<span class="token punctuation">}</span>

<span class="token keyword">void</span> <span class="token keyword">loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token comment">// Tempo entre cada medida</span>
  <span class="token function">delay</span><span class="token punctuation">(</span><span class="token number">2000</span><span class="token punctuation">)</span><span class="token punctuation">;</span>


  <span class="token builtin">Serial</span><span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span><span class="token string">"UV: "</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token builtin">Serial</span><span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span> ml<span class="token punctuation">.</span><span class="token function">getUV</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

  <span class="token comment">// Formata o dados para exibir no display</span>
  char uvString<span class="token punctuation">[</span><span class="token number">25</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
  <span class="token function">sprintf</span><span class="token punctuation">(</span>uvString<span class="token punctuation">,</span> <span class="token string">"Ultravioleta: %.5f"</span><span class="token punctuation">,</span> ml<span class="token punctuation">.</span><span class="token function">getUV</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

  <span class="token comment">// Limpa o buffer do display</span>
  <span class="token builtin">display</span><span class="token punctuation">.</span><span class="token function">clearDisplay</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token comment">// Posição inicial do cursor no display</span>
  <span class="token builtin">display</span><span class="token punctuation">.</span><span class="token function">setCursor</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token comment">//Envia novos dados ao buffer do display</span>
  <span class="token builtin">display</span><span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>uvString<span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token comment">// Atualiza o display para mostrar os dados no buffer</span>
  <span class="token builtin">display</span><span class="token punctuation">.</span><span class="token function">display</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span></code></pre></div>
</div><div data-element-id="elm_qdhG74SqffJCXzvt3SNIxg" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_qdhG74SqffJCXzvt3SNIxg"].zpelem-heading { border-radius:1px; margin-block-start:-11px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="font-size:20px;">Resultado:</span></h2></div>
<div data-element-id="elm_I8P2vo9gWMPvhSI8S5R4FA" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_I8P2vo9gWMPvhSI8S5R4FA"] .zpimage-container figure img { width: 500px ; height: 375.00px ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_I8P2vo9gWMPvhSI8S5R4FA"] .zpimage-container figure img { width:500px ; height:375.00px ; } } @media (max-width: 767px) { [data-element-id="elm_I8P2vo9gWMPvhSI8S5R4FA"] .zpimage-container figure img { width:500px ; height:375.00px ; } } [data-element-id="elm_I8P2vo9gWMPvhSI8S5R4FA"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-tablet-align-left zpimage-mobile-align-left zpimage-size-medium zpimage-tablet-fallback-medium zpimage-mobile-fallback-medium hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/Utilizando%20o%20ESP32-C3%20em%20conjunto%20com%20o%20sensor%20ml-1-final.jpeg" width="500" height="375.00" loading="lazy" size="medium" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_Bz8tL57goq7DQY4DaZbQtg" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_Bz8tL57goq7DQY4DaZbQtg"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><p style="text-align:justify;">Agora, o ESP32-C3 deve ler os valores do sensor ML8511 e exibi-los no display OLED. Você verá a luminosidade no espectro ultravioleta em tempo real.</p><p style="text-align:justify;"><br/></p><p style="text-align:justify;">Este é um exemplo básico para começar a trabalhar com o sensor ML8511 e um display OLED em um ESP32-C3. Você pode personalizar o código e adicionar recursos adicionais, como a conversão para unidades UV específicas ou a inclusão de informações adicionais no display, conforme necessário para o seu projeto.</p></div></div>
</div><div data-element-id="elm_dZ0gMzMKUo1L063tqgO1bw" data-element-type="divider" class="zpelement zpelem-divider "><style type="text/css"> [data-element-id="elm_dZ0gMzMKUo1L063tqgO1bw"].zpelem-divider{ border-radius:1px; } </style><style></style><div class="zpdivider-container zpdivider-line zpdivider-align-center zpdivider-width100 zpdivider-line-style-solid "><div class="zpdivider-common"></div>
</div></div><div data-element-id="elm_81TedfHy-KQL6i5kzi0_qQ" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_81TedfHy-KQL6i5kzi0_qQ"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="font-style:italic;">Sobre o autor:</span></p><div><pre style="color:inherit;margin-right:26px;font-size:15px;"><span style="font-family:arial, sans-serif;">Matheus desempenha o papel de desenvolvedor de sistemas de tecnologia da informação dentro da equipe da UKTech. Possui  experiência no</span></pre><pre style="margin-right:26px;"><span style="color:inherit;font-family:arial, sans-serif;font-size:15px;">domínio de </span><span style="font-family:arial, sans-serif;font-size:15px;">micro controladores</span><span style="color:inherit;font-family:arial, sans-serif;font-size:15px;"> e desenvolvimento de software, e está na reta final de sua graduação em Engenharia de Computação. </span></pre><pre style="color:inherit;margin-right:26px;font-size:15px;"><span style="font-family:arial, sans-serif;">Em seus momentos de lazer, ele se dedica a interesses como jogos de computador e a apreciação de animes.</span></pre></div></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Tue, 26 Sep 2023 11:45:54 -0300</pubDate></item><item><title><![CDATA[Utilizando o ESP32-C3 em conjunto com o sensor de temperatura e umidade DHT11/DHT22 e a Arduíno IDE]]></title><link>https://www.uktech.com.br/bloguk/post/utilizando-o-esp32-c3-em-conjunto-com-o-sensor-detemperatura-e-umidade-dht11-dht22-e-a-arduíno-ide</link><description><![CDATA[<img align="left" hspace="5" src="https://www.uktech.com.br/allison-saeng-I4t4Ym-YZBs-unsplash.jpg"/>Tutorial de como usar o ESP32-C3 em conjunto com o sensor DHT11/DHT22 para medir temperatura e umidade, todas as informações aparecerão em um display OLED.]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_Cy3eSVMPSfSN31DehJ_MDw" data-element-type="section" class="zpsection "><style type="text/css"> [data-element-id="elm_Cy3eSVMPSfSN31DehJ_MDw"].zpsection{ border-radius:1px; } </style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_t35Ki2v8SriV1VQmEGgsGg" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm_W-eRWQfZSua1-20n5qC0rA" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"> [data-element-id="elm_W-eRWQfZSua1-20n5qC0rA"].zpelem-col{ border-radius:1px; } </style><div data-element-id="elm_7bP9Ta_sRaOQhLh08hbh7w" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_7bP9Ta_sRaOQhLh08hbh7w"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-center " data-editor="true"><p style="text-align:left;"><span style="color:inherit;">No tutorial de hoje vamos mostrar como usar o ESP32-C3 em conjunto com o sensor DHT11/DHT22 para medir temperatura e umidade, também vamos mostrar essas informações em um display OLED.&nbsp;</span></p><p style="text-align:left;"><span style="color:rgb(49, 188, 173);">Materiais utilizados:&nbsp;</span></p><ul><li style="text-align:left;"><span style="color:inherit;">ESP32-C3 (UKT-ESP32C3-DEV-MINI-USB)</span><br/></li><li style="text-align:left;"><span style="color:inherit;">DHT11&nbsp;</span></li><li style="text-align:left;"><span style="color:inherit;">Resistor 10KΩ&nbsp;</span></li><li style="text-align:left;"><span style="color:inherit;">Display LCD (128x32)&nbsp;</span></li><li style="text-align:left;"><span style="color:inherit;">Jumpers ou fios</span></li></ul></div>
</div><div data-element-id="elm__HE_rWv6XIjnBHeXqjRhBQ" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm__HE_rWv6XIjnBHeXqjRhBQ"].zpelem-heading { border-radius:1px; margin-block-start:-12px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="color:inherit;font-size:25px;">Esquemático:</span><br/></h2></div>
<div data-element-id="elm_ftBLfSAJv1niKiRCSlEwnA" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_ftBLfSAJv1niKiRCSlEwnA"] .zpimage-container figure img { width: 500px ; height: 419.24px ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_ftBLfSAJv1niKiRCSlEwnA"] .zpimage-container figure img { width:500px ; height:419.24px ; } } @media (max-width: 767px) { [data-element-id="elm_ftBLfSAJv1niKiRCSlEwnA"] .zpimage-container figure img { width:500px ; height:419.24px ; } } [data-element-id="elm_ftBLfSAJv1niKiRCSlEwnA"].zpelem-image { border-radius:1px; margin-block-start:-1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-tablet-align-left zpimage-mobile-align-left zpimage-size-medium zpimage-tablet-fallback-medium zpimage-mobile-fallback-medium hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/2023-09-18-09-38-26-Captura%20de%20tela%20de%202023-09-18%2009-38-13.png" width="500" height="419.24" loading="lazy" size="medium" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_vkdEc_YdyCI3gCGa-d2zXw" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_vkdEc_YdyCI3gCGa-d2zXw"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;">Bibliotecas Arduíno utilizadas:&nbsp;</span></p><ul><li><span style="color:inherit;">DHT sensor library by Adafruit&nbsp;</span></li><li><span style="color:inherit;">SSD1306 by Adafruit&nbsp;</span></li></ul><p><span style="color:inherit;">E dependências das respectivas bibliotecas acima.</span><br/></p></div>
</div><div data-element-id="elm_enhE8dUXjWXcIetgvs8Z3Q" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_enhE8dUXjWXcIetgvs8Z3Q"].zpelem-heading { border-radius:1px; margin-block-start:-5px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="color:inherit;font-size:25px;">Seleção da placa na Arduíno IDE:</span><br/></h2></div>
<div data-element-id="elm_MFh5rzyJuD73aEwf1IWA3A" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_MFh5rzyJuD73aEwf1IWA3A"] .zpimage-container figure img { width: 277px !important ; height: 51px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_MFh5rzyJuD73aEwf1IWA3A"] .zpimage-container figure img { width:277px ; height:51px ; } } @media (max-width: 767px) { [data-element-id="elm_MFh5rzyJuD73aEwf1IWA3A"] .zpimage-container figure img { width:277px ; height:51px ; } } [data-element-id="elm_MFh5rzyJuD73aEwf1IWA3A"].zpelem-image { border-radius:1px; margin-block-start:0px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-tablet-align-left zpimage-mobile-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/2023-09-18-14-53-23-Captura%20de%20tela%20de%202023-09-18%2014-53-18.png" width="277" height="51" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_PXM08dWVXJqsMqmTKRrRfg" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_PXM08dWVXJqsMqmTKRrRfg"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;">Selecionamos o modulo ESP32C3 .</span><br/></p></div>
</div><div data-element-id="elm_dm46TyqmQiZMdJyTcICj0A" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_dm46TyqmQiZMdJyTcICj0A"].zpelem-heading { border-radius:1px; margin-block-start:-5px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="color:inherit;font-size:25px;">Código:</span><br/></h2></div>
<div data-element-id="elm_uLH-VmYqWQ-bosKOdp4KRQ" data-element-type="divider" class="zpelement zpelem-divider "><style type="text/css"> [data-element-id="elm_uLH-VmYqWQ-bosKOdp4KRQ"].zpelem-divider{ border-radius:1px; margin-block-start:-14px; } </style><style></style><div class="zpdivider-container zpdivider-line zpdivider-align-center zpdivider-width100 zpdivider-line-style-solid "><div class="zpdivider-common"></div>
</div></div><div data-element-id="elm_DOCdqpQGQlqW2CojP-8wiw" data-element-type="codeSnippet" class="zpelement zpelem-codesnippet "><div class="zpsnippet-container"><pre><code class="fenced-code-block language-arduino"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">"DHT.h"</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">"Adafruit_SSD1306.h"</span></span>

<span class="token comment">// Define o tamanho do display OLED</span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">SCREEN_WIDTH</span> <span class="token expression"><span class="token number">128</span></span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">SCREEN_HEIGHT</span> <span class="token expression"><span class="token number">32</span></span></span>

<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">DHTPIN</span> <span class="token expression"><span class="token number">1</span>  </span><span class="token comment">//Pino onde esta conectado o sensor DHT</span></span>

<span class="token comment">// Define o modelo de sensor DHT que estamos usando</span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">DHTTYPE</span> <span class="token expression">DHT11  </span><span class="token comment">// DHT 11</span></span>
<span class="token comment">//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321</span>
<span class="token comment">//#define DHTTYPE DHT21   // DHT 21 (AM2301)</span>

<span class="token comment">// Inidicaliza o sensor e o display</span>
DHT <span class="token function">dht</span><span class="token punctuation">(</span>DHTPIN<span class="token punctuation">,</span> DHTTYPE<span class="token punctuation">)</span><span class="token punctuation">;</span>
Adafruit_SSD1306 <span class="token function">display</span><span class="token punctuation">(</span>SCREEN_WIDTH<span class="token punctuation">,</span> SCREEN_HEIGHT<span class="token punctuation">,</span> <span class="token operator">&amp;</span><span class="token builtin">Wire</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token keyword">void</span> <span class="token keyword">setup</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token comment">//Velocidade do monitor serial</span>
  <span class="token builtin">Serial</span><span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span><span class="token number">115200</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token builtin">Serial</span><span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token function">F</span><span class="token punctuation">(</span><span class="token string">"DHTxx test!"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

  dht<span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token comment">// Pinos do barramento I2C</span>
  <span class="token builtin">Wire</span><span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

  <span class="token comment">// Verifica estado de inicialização do display, acusa falha em caso de erro</span>
  <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span><span class="token builtin">display</span><span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span>SSD1306_SWITCHCAPVCC<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token boolean">false</span><span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token builtin">Serial</span><span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token function">F</span><span class="token punctuation">(</span><span class="token string">"Falha ao inicializar o SSD1306"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token punctuation">;</span><span class="token punctuation">;</span><span class="token punctuation">)</span>
      <span class="token punctuation">;</span>
  <span class="token punctuation">}</span>

  <span class="token comment">// Limpe o buffer do display</span>
  <span class="token builtin">display</span><span class="token punctuation">.</span><span class="token function">clearDisplay</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

  <span class="token comment">// Configuração do texto</span>
  <span class="token builtin">display</span><span class="token punctuation">.</span><span class="token function">setTextSize</span><span class="token punctuation">(</span><span class="token number">1.5</span><span class="token punctuation">)</span><span class="token punctuation">;</span>             <span class="token comment">// Tamanho do texto (1 = 6x8 pixels)</span>
  <span class="token builtin">display</span><span class="token punctuation">.</span><span class="token function">setTextColor</span><span class="token punctuation">(</span>SSD1306_WHITE<span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token comment">// Cor do texto</span>
<span class="token punctuation">}</span>

<span class="token keyword">void</span> <span class="token keyword">loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token comment">// Tempo entre cada medida</span>
  <span class="token function">delay</span><span class="token punctuation">(</span><span class="token number">2000</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

  float h <span class="token operator">=</span> dht<span class="token punctuation">.</span><span class="token function">readHumidity</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  float t <span class="token operator">=</span> dht<span class="token punctuation">.</span><span class="token function">readTemperature</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  float f <span class="token operator">=</span> dht<span class="token punctuation">.</span><span class="token function">readTemperature</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

  <span class="token comment">// Verifica se as leituras são validas</span>
  <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">isnan</span><span class="token punctuation">(</span>h<span class="token punctuation">)</span> <span class="token operator">||</span> <span class="token function">isnan</span><span class="token punctuation">(</span>t<span class="token punctuation">)</span> <span class="token operator">||</span> <span class="token function">isnan</span><span class="token punctuation">(</span>f<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token builtin">Serial</span><span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token function">F</span><span class="token punctuation">(</span><span class="token string">"Falha ao ler do sensor"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">return</span><span class="token punctuation">;</span>
  <span class="token punctuation">}</span>

  <span class="token comment">// Calcula o índice de calor em Fahrenheit</span>
  float hif <span class="token operator">=</span> dht<span class="token punctuation">.</span><span class="token function">computeHeatIndex</span><span class="token punctuation">(</span>f<span class="token punctuation">,</span> h<span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token comment">// Calcula o índice de calor em Celsius</span>
  float hic <span class="token operator">=</span> dht<span class="token punctuation">.</span><span class="token function">computeHeatIndex</span><span class="token punctuation">(</span>t<span class="token punctuation">,</span> h<span class="token punctuation">,</span> <span class="token boolean">false</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

  <span class="token builtin">Serial</span><span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span><span class="token function">F</span><span class="token punctuation">(</span><span class="token string">"Umidade: "</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token builtin">Serial</span><span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span>h<span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token builtin">Serial</span><span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span><span class="token function">F</span><span class="token punctuation">(</span><span class="token string">"%  Temperatura: "</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token builtin">Serial</span><span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span>t<span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token builtin">Serial</span><span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span><span class="token function">F</span><span class="token punctuation">(</span><span class="token string">"°C "</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token builtin">Serial</span><span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span>f<span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token builtin">Serial</span><span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span><span class="token function">F</span><span class="token punctuation">(</span><span class="token string">"°F  Indice de calor: "</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token builtin">Serial</span><span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span>hic<span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token builtin">Serial</span><span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span><span class="token function">F</span><span class="token punctuation">(</span><span class="token string">"°C "</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token builtin">Serial</span><span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span>hif<span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token builtin">Serial</span><span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token function">F</span><span class="token punctuation">(</span><span class="token string">"°F"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

  <span class="token comment">// Formata o dados para exibir no display</span>
  char tempString<span class="token punctuation">[</span><span class="token number">25</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
  <span class="token function">sprintf</span><span class="token punctuation">(</span>tempString<span class="token punctuation">,</span> <span class="token string">"Temperatura: %.2f%cC"</span><span class="token punctuation">,</span> t<span class="token punctuation">,</span> <span class="token punctuation">(</span>char<span class="token punctuation">)</span><span class="token number">247</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  char humString<span class="token punctuation">[</span><span class="token number">20</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
  <span class="token function">sprintf</span><span class="token punctuation">(</span>humString<span class="token punctuation">,</span> <span class="token string">"Umidade: %.2f%%"</span><span class="token punctuation">,</span> h<span class="token punctuation">)</span><span class="token punctuation">;</span>

  <span class="token comment">// Limpa o buffer do display</span>
  <span class="token builtin">display</span><span class="token punctuation">.</span><span class="token function">clearDisplay</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token comment">// Posição inicial do cursor no display</span>
  <span class="token builtin">display</span><span class="token punctuation">.</span><span class="token function">setCursor</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

  <span class="token comment">//Envia novos dados ao buffer do display</span>
  <span class="token builtin">display</span><span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>tempString<span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token builtin">display</span><span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>humString<span class="token punctuation">)</span><span class="token punctuation">;</span>

  <span class="token comment">// Atualiza o display para mostrar os dados no buffer</span>
  <span class="token builtin">display</span><span class="token punctuation">.</span><span class="token function">display</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span></code></pre></div>
</div><div data-element-id="elm_64ofmlcbNGPYxiDW03ncOg" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_64ofmlcbNGPYxiDW03ncOg"].zpelem-heading { border-radius:1px; margin-block-start:-5px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="color:inherit;font-size:25px;">Resultado:</span><br/></h2></div>
<div data-element-id="elm_6WeHUbylZ5_aaVyT2lwZEQ" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_6WeHUbylZ5_aaVyT2lwZEQ"] .zpimage-container figure img { width: 1110px ; height: 624.38px ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_6WeHUbylZ5_aaVyT2lwZEQ"] .zpimage-container figure img { width:723px ; height:406.69px ; } } @media (max-width: 767px) { [data-element-id="elm_6WeHUbylZ5_aaVyT2lwZEQ"] .zpimage-container figure img { width:415px ; height:233.44px ; } } [data-element-id="elm_6WeHUbylZ5_aaVyT2lwZEQ"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-center zpimage-tablet-align-center zpimage-mobile-align-center zpimage-size-fit zpimage-tablet-fallback-fit zpimage-mobile-fallback-fit hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/2023-09-18-15-41-07-a2fcd7ba-d8b7-4e27-a588-d01c2b414a76.jpeg" width="415" height="233.44" loading="lazy" size="fit" data-lightbox="true"/></picture></span></figure></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Mon, 18 Sep 2023 16:35:01 -0300</pubDate></item></channel></rss>