<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ontologia - MCU &amp; FPGA</title>
	<atom:link href="https://mcu.tec.br/tags/ontologia/feed/" rel="self" type="application/rss+xml" />
	<link>https://mcu.tec.br</link>
	<description>Microcontroladores &#38; FPGA</description>
	<lastBuildDate>Sat, 29 Mar 2025 01:29:44 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1</generator>

<image>
	<url>https://mcu.tec.br/wp-content/uploads/2025/02/Robo-para-o-site-MCU.tec_.br-512x512-1-150x150.png</url>
	<title>ontologia - MCU &amp; FPGA</title>
	<link>https://mcu.tec.br</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Gateways que Integram Dados Ontológicos de Dispositivos Embarcados</title>
		<link>https://mcu.tec.br/algoritimos/gateways-que-integram-dados-ontologicos-de-dispositivos-embarcados/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=gateways-que-integram-dados-ontologicos-de-dispositivos-embarcados</link>
		
		<dc:creator><![CDATA[Carlos Delfino]]></dc:creator>
		<pubDate>Thu, 27 Mar 2025 21:20:00 +0000</pubDate>
				<category><![CDATA[Algoritimos]]></category>
		<category><![CDATA[ontologia]]></category>
		<category><![CDATA[dados ontológicos]]></category>
		<category><![CDATA[esp32]]></category>
		<category><![CDATA[gateway inteligente]]></category>
		<category><![CDATA[integração semântica]]></category>
		<category><![CDATA[interoperabilidade IoT]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[mini ontologia]]></category>
		<category><![CDATA[MQTT semântico]]></category>
		<category><![CDATA[OWL]]></category>
		<category><![CDATA[OWL Sensor]]></category>
		<category><![CDATA[Python para IoT]]></category>
		<category><![CDATA[RDF]]></category>
		<category><![CDATA[RDF em Python]]></category>
		<category><![CDATA[RDF Turtle]]></category>
		<category><![CDATA[RDFLib]]></category>
		<category><![CDATA[semântica em dispositivos]]></category>
		<category><![CDATA[sensores semânticos]]></category>
		<category><![CDATA[sistemas embarcados]]></category>
		<category><![CDATA[triplestore]]></category>
		<guid isPermaLink="false">https://mcu.tec.br/?p=273</guid>

					<description><![CDATA[<p>Gateways inteligentes com suporte a ontologias permitem que dispositivos embarcados interpretem e integrem dados semânticos de forma eficiente e interoperável. Saiba como isso funciona com exemplos práticos em C e Python.</p>
<p>The post <a href="https://mcu.tec.br/algoritimos/gateways-que-integram-dados-ontologicos-de-dispositivos-embarcados/">Gateways que Integram Dados Ontológicos de Dispositivos Embarcados</a> first appeared on <a href="https://mcu.tec.br">MCU & FPGA</a>.</p>]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">No universo da Internet das Coisas (IoT) e dos sistemas embarcados, a troca de dados entre dispositivos heterogêneos é uma necessidade constante. Porém, essa integração muitas vezes esbarra em problemas de semântica: como garantir que diferentes dispositivos compreendam os dados da mesma forma? A resposta moderna para essa questão é o uso de <em>ontologias</em> — modelos formais que descrevem o significado dos dados. Neste artigo, vamos explorar como <em>gateways inteligentes</em> podem usar ontologias para integrar dispositivos embarcados de forma mais eficiente, interoperável e semântica.</p>



<h2 class="wp-block-heading">O Que São Ontologias?</h2>



<p class="wp-block-paragraph">Ontologias são estruturas formais que definem conceitos, categorias e as relações entre eles em um determinado domínio. Elas funcionam como um &#8220;dicionário inteligente&#8221;, permitindo que sistemas diferentes compartilhem uma compreensão comum dos dados. Por exemplo, dois sensores de temperatura diferentes podem enviar dados em formatos distintos, mas uma ontologia permite que ambos sejam compreendidos como representações da mesma informação semântica: a temperatura ambiente.</p>



<h2 class="wp-block-heading">O Papel do Gateway Ontológico</h2>



<p class="wp-block-paragraph">Gateways são dispositivos intermediários que conectam sensores, atuadores e sistemas maiores, como servidores em nuvem. Quando dotados de capacidade ontológica, esses gateways não apenas transmitem dados, mas também interpretam, traduzem e contextualizam as informações de acordo com uma ontologia comum.</p>



<p class="wp-block-paragraph">Imagine o seguinte cenário:</p>



<ul class="wp-block-list">
<li>Um sensor envia <code>{ "tmp": 25 }</code></li>



<li>Outro envia <code>{ "temperature": { "value": 25, "unit": "C" } }</code></li>
</ul>



<p class="wp-block-paragraph">Ambos indicam temperatura, mas de formas distintas. O gateway com suporte ontológico é capaz de interpretar que <code>tmp</code> e <code>temperature.value</code> representam o mesmo conceito, e traduzi-los para uma ontologia comum como OWL (Web Ontology Language), mapeando os dados para, por exemplo:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="<Temperature rdf:about=&quot;#sensor1&quot;&gt;
  <hasValue rdf:datatype=&quot;xsd:float&quot;&gt;25.0</hasValue&gt;
  <hasUnit rdf:datatype=&quot;xsd:string&quot;&gt;Celsius</hasUnit&gt;
</Temperature&gt;
" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">Temperature</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">rdf</span><span style="color: #ECEFF4">:</span><span style="color: #8FBCBB">about</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">#sensor1</span><span style="color: #ECEFF4">&quot;</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">hasValue</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">rdf</span><span style="color: #ECEFF4">:</span><span style="color: #8FBCBB">datatype</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">xsd:float</span><span style="color: #ECEFF4">&quot;</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF">25.0</span><span style="color: #81A1C1">&lt;/</span><span style="color: #8FBCBB">hasValue</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">hasUnit</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">rdf</span><span style="color: #ECEFF4">:</span><span style="color: #8FBCBB">datatype</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">xsd:string</span><span style="color: #ECEFF4">&quot;</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF">Celsius</span><span style="color: #81A1C1">&lt;/</span><span style="color: #8FBCBB">hasUnit</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"><span style="color: #81A1C1">&lt;/</span><span style="color: #8FBCBB">Temperature</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span></code></pre></div>



<h2 class="wp-block-heading">Exemplo de Implementação em C com ESP32</h2>



<p class="wp-block-paragraph">Para ilustrar, vamos criar uma estrutura básica para um gateway que recebe dados de sensores via UART e traduz essas informações para um modelo RDF simplificado, ainda em C.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="typedef struct {
    float value;
    char unit[10];
    char semantic_id[32]; // Ligação com ontologia
} SensorData;

void parse_uart_message(const char* raw, SensorData* data) {
    // Exemplo bruto: &quot;tmp=25.5;unit=C&quot;
    sscanf(raw, &quot;tmp=%f;unit=%s&quot;, &amp;data-&gt;value, data-&gt;unit);
    strcpy(data-&gt;semantic_id, &quot;http://example.org/ontology#Temperature&quot;);
}

void print_rdf(SensorData* data) {
    printf(&quot;<Temperature rdf:about=\&quot;#sensor1\&quot;&gt;\n&quot;);
    printf(&quot;  <hasValue rdf:datatype=\&quot;xsd:float\&quot;&gt;%.2f</hasValue&gt;\n&quot;, data-&gt;value);
    printf(&quot;  <hasUnit rdf:datatype=\&quot;xsd:string\&quot;&gt;%s</hasUnit&gt;\n&quot;, data-&gt;unit);
    printf(&quot;</Temperature&gt;\n&quot;);
}
" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9">typedef</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">struct</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">float</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">value</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">char</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">unit</span><span style="color: #D8DEE9FF">[</span><span style="color: #B48EAD">10</span><span style="color: #D8DEE9FF">]</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">char</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">semantic_id</span><span style="color: #D8DEE9FF">[</span><span style="color: #B48EAD">32</span><span style="color: #D8DEE9FF">]</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #616E88">// Ligação com ontologia</span></span>
<span class="line"><span style="color: #ECEFF4">}</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">SensorData</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">void</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">parse_uart_message</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">const</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">char</span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">raw</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">SensorData</span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">data</span><span style="color: #D8DEE9FF">) </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #ECEFF4">    </span><span style="color: #616E88">// Exemplo bruto: &quot;tmp=25.5;unit=C&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">sscanf</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">raw</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">tmp=%f;unit=%s</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&amp;</span><span style="color: #D8DEE9">data</span><span style="color: #81A1C1">-&gt;</span><span style="color: #D8DEE9">value</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">data</span><span style="color: #81A1C1">-&gt;</span><span style="color: #D8DEE9">unit</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">strcpy</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">data</span><span style="color: #81A1C1">-&gt;</span><span style="color: #D8DEE9">semantic_id</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">http://example.org/ontology#Temperature</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">void</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">print_rdf</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">SensorData</span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">data</span><span style="color: #D8DEE9FF">) </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">printf</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">&lt;Temperature rdf:about=</span><span style="color: #EBCB8B">\&quot;</span><span style="color: #A3BE8C">#sensor1</span><span style="color: #EBCB8B">\&quot;</span><span style="color: #A3BE8C">&gt;</span><span style="color: #EBCB8B">\n</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">printf</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">  &lt;hasValue rdf:datatype=</span><span style="color: #EBCB8B">\&quot;</span><span style="color: #A3BE8C">xsd:float</span><span style="color: #EBCB8B">\&quot;</span><span style="color: #A3BE8C">&gt;%.2f&lt;/hasValue&gt;</span><span style="color: #EBCB8B">\n</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">data</span><span style="color: #81A1C1">-&gt;</span><span style="color: #D8DEE9">value</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">printf</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">  &lt;hasUnit rdf:datatype=</span><span style="color: #EBCB8B">\&quot;</span><span style="color: #A3BE8C">xsd:string</span><span style="color: #EBCB8B">\&quot;</span><span style="color: #A3BE8C">&gt;%s&lt;/hasUnit&gt;</span><span style="color: #EBCB8B">\n</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">data</span><span style="color: #81A1C1">-&gt;</span><span style="color: #D8DEE9">unit</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">printf</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">&lt;/Temperature&gt;</span><span style="color: #EBCB8B">\n</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">Este exemplo mostra como uma mensagem recebida pode ser traduzida para uma estrutura semântica compreensível por serviços externos.</p>



<h2 class="wp-block-heading">Benefícios da Integração Ontológica</h2>



<ul class="wp-block-list">
<li><strong>Interoperabilidade:</strong> dispositivos de diferentes fabricantes e protocolos podem ser integrados sem ajustes manuais.</li>



<li><strong>Descoberta automática:</strong> novos dispositivos podem ser automaticamente identificados e compreendidos.</li>



<li><strong>Integração com IA:</strong> sistemas de inteligência artificial podem raciocinar sobre os dados com base em seus significados e não apenas em seus valores.</li>
</ul>



<h2 class="wp-block-heading">Tecnologias Complementares</h2>



<p class="wp-block-paragraph">Para gateways mais avançados, bibliotecas como <a href="https://owlcs.github.io/owlapi/">OWL API</a> (Java) ou <a href="https://librdf.org/">RDF4C</a> (C) podem ser incorporadas ao sistema. Em dispositivos embarcados como ESP32, devido às limitações de memória, uma alternativa é converter os dados para formatos semânticos leves (como JSON-LD ou RDFa) e enviá-los para processamento posterior em um servidor.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">Gateways ontológicos são peças-chave para tornar a IoT verdadeiramente inteligente. Eles não apenas conectam dispositivos, mas traduzem dados brutos em conhecimento compreensível e compartilhável. A adoção de ontologias nos gateways eleva o patamar da integração de sistemas embarcados, tornando possível a construção de aplicações robustas, escaláveis e orientadas ao significado.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">A integração semântica de dispositivos embarcados por meio de gateways ontológicos representa um salto qualitativo na construção de sistemas IoT e automação inteligente. Em vez de apenas trafegar dados, esses gateways <strong>entendem e contextualizam</strong> as informações que circulam na rede, favorecendo a <strong>interoperabilidade</strong>, a <strong>escalabilidade</strong> e a <strong>tomada de decisão automatizada</strong>.</p>



<p class="wp-block-paragraph">A <strong>mini-ontologia</strong> apresentada aqui oferece uma base para representar sensores de ambiente com consistência semântica, enquanto o exemplo em <strong>Python com RDFLib</strong> mostra como esse modelo pode ser aplicado facilmente em servidores de borda ou aplicações em nuvem.</p>



<h3 class="wp-block-heading">Benefícios em Destaque</h3>



<ul class="wp-block-list">
<li><strong>Interoperabilidade total</strong>: Dispositivos de diferentes fabricantes e protocolos convergem para uma linguagem comum baseada em ontologia.</li>



<li><strong>Rastreamento e auditoria</strong>: Cada medição é armazenada com significado explícito, facilitando auditorias e diagnósticos.</li>



<li><strong>Base para inteligência artificial</strong>: A semântica dos dados permite raciocínio automatizado, inferências e respostas proativas.</li>



<li><strong>Escalabilidade</strong>: Novos sensores podem ser adicionados com mínima ou nenhuma reconfiguração.</li>
</ul>



<h3 class="wp-block-heading">Desafios</h3>



<ul class="wp-block-list">
<li><strong>Capacidade computacional dos gateways</strong>: Processamento ontológico exige memória e poder de CPU, o que pode ser limitado em dispositivos embarcados.</li>



<li><strong>Curva de aprendizado</strong>: Tecnologias como OWL, RDF, SPARQL e ferramentas como RDFLib ou Protégé podem exigir treinamento específico.</li>



<li><strong>Padrões em evolução</strong>: O ecossistema semântico ainda está amadurecendo no contexto de sistemas embarcados.</li>
</ul>



<h3 class="wp-block-heading">Caminhos Futuros</h3>



<ul class="wp-block-list">
<li>Uso de <strong>ontologias padronizadas</strong>, como SSN (Semantic Sensor Network) da W3C;</li>



<li>Integração com <strong>bancos de dados triplestore</strong> como GraphDB, Jena Fuseki ou Blazegraph;</li>



<li>Visualização semântica com dashboards interativos baseados em <em>React</em> ou <em>Grafana</em>;</li>



<li>Extensão da ontologia para <strong>atuadores</strong>, <strong>eventos temporais</strong> e <strong>alertas automatizados</strong>.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Em um mundo cada vez mais conectado, onde sensores e dispositivos proliferam em ritmo exponencial, os gateways com suporte ontológico surgem como peças-chave para transformar dados dispersos em <strong>conhecimento útil e acionável</strong>.</p>
</blockquote><p>The post <a href="https://mcu.tec.br/algoritimos/gateways-que-integram-dados-ontologicos-de-dispositivos-embarcados/">Gateways que Integram Dados Ontológicos de Dispositivos Embarcados</a> first appeared on <a href="https://mcu.tec.br">MCU & FPGA</a>.</p>]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">273</post-id>	</item>
		<item>
		<title>Ontologias Aplicadas a Sistemas Embarcados e IoT</title>
		<link>https://mcu.tec.br/algoritimos/ontologias-aplicadas-a-sistemas-embarcados-e-iot/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ontologias-aplicadas-a-sistemas-embarcados-e-iot</link>
		
		<dc:creator><![CDATA[Carlos Delfino]]></dc:creator>
		<pubDate>Wed, 26 Mar 2025 15:11:04 +0000</pubDate>
				<category><![CDATA[Algoritimos]]></category>
		<category><![CDATA[ontologia]]></category>
		<category><![CDATA[ArduinoJson]]></category>
		<category><![CDATA[C para ESP32]]></category>
		<category><![CDATA[dados semânticos]]></category>
		<category><![CDATA[esp32]]></category>
		<category><![CDATA[inferência em IoT]]></category>
		<category><![CDATA[Internet das Coisas]]></category>
		<category><![CDATA[interoperabilidade]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[MQTT]]></category>
		<category><![CDATA[ontologias em tempo real]]></category>
		<category><![CDATA[PubSubClient]]></category>
		<category><![CDATA[sensores inteligentes]]></category>
		<category><![CDATA[sistemas embarcados]]></category>
		<category><![CDATA[Web Semântica]]></category>
		<guid isPermaLink="false">https://mcu.tec.br/?p=245</guid>

					<description><![CDATA[<p>Descubra como aplicar ontologia em sistemas embarcados e IoT com exemplos em C para ESP32, melhorando interoperabilidade e inteligência dos dispositivos.</p>
<p>The post <a href="https://mcu.tec.br/algoritimos/ontologias-aplicadas-a-sistemas-embarcados-e-iot/">Ontologias Aplicadas a Sistemas Embarcados e IoT</a> first appeared on <a href="https://mcu.tec.br">MCU & FPGA</a>.</p>]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading">Uma abordagem prática com exemplos em C para ESP32</h2>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">O uso de ontologias, tradicionalmente vinculado às ciências cognitivas e à web semântica, vem ganhando espaço em contextos mais técnicos como a Internet das Coisas (IoT) e os Sistemas Embarcados. Neste artigo, exploramos como ontologias podem organizar o conhecimento de sensores, dispositivos e contextos de forma padronizada e interoperável, facilitando o desenvolvimento, a escalabilidade e a manutenção de sistemas inteligentes. Também apresentamos exemplos práticos de aplicação em C no ESP32.</p>


<a class="wp-block-read-more" href="https://mcu.tec.br/algoritimos/ontologias-aplicadas-a-sistemas-embarcados-e-iot/" target="_self">Leia mais<span class="screen-reader-text">: Ontologias Aplicadas a Sistemas Embarcados e IoT</span></a>


<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9e0.png" alt="🧠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> O que é Ontologia em Computação?</h2>



<p class="wp-block-paragraph">Na ciência da computação, uma <strong>ontologia</strong> é uma representação estruturada de conhecimento de um domínio específico, composta por:</p>



<ul class="wp-block-list">
<li><strong>Conceitos (classes)</strong> — como &#8220;Temperatura&#8221;, &#8220;Sensor&#8221;, &#8220;Dispositivo&#8221;</li>



<li><strong>Propriedades (atributos)</strong> — como &#8220;valor&#8221;, &#8220;unidade&#8221;, &#8220;timestamp&#8221;</li>



<li><strong>Relações</strong> — como &#8220;um Sensor mede uma Temperatura&#8221;</li>



<li><strong>Regras de inferência e restrições</strong> — como &#8220;um valor de temperatura em °C deve estar entre -40 e 125&#8221;.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2699.png" alt="⚙" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Aplicações de Ontologia em IoT e Sistemas Embarcados</h2>



<h3 class="wp-block-heading">1. <strong>Interoperabilidade Semântica</strong></h3>



<p class="wp-block-paragraph">Permite que sensores de diferentes fabricantes &#8220;falem a mesma língua&#8221; em gateways, hubs ou sistemas centralizados.</p>



<h3 class="wp-block-heading">2. <strong>Autodescrição de Dispositivos</strong></h3>



<p class="wp-block-paragraph">Usando ontologias, um sensor pode anunciar seu tipo, unidade de medida, intervalo de operação, e método de leitura, facilitando <strong>configuração automática</strong>.</p>



<h3 class="wp-block-heading">3. <strong>Raciocínio Baseado em Regras</strong></h3>



<p class="wp-block-paragraph">Um sistema pode inferir que &#8220;o ambiente está em risco de incêndio&#8221; se <code>Temperatura &gt; 60°C</code> e <code>Sensor de Fumaça = Ativado</code>.</p>



<h3 class="wp-block-heading">4. <strong>Diagnóstico e Autoconfiguração</strong></h3>



<p class="wp-block-paragraph">Ontologias permitem definir causas e efeitos, como &#8220;se umidade estiver zero e temperatura estiver alta, o sensor pode estar desconectado&#8221;.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9ea.png" alt="🧪" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Estrutura Ontológica Simples para Sensores</h2>



<p class="wp-block-paragraph">Vamos criar uma mini ontologia em C para o ESP32, simulando algo como:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="Sensor → Temperatura
        → Umidade

Sensor tem:
  - nome
  - unidade
  - valor
  - função de leitura
" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9">Sensor</span><span style="color: #D8DEE9FF"> → </span><span style="color: #D8DEE9">Temperatura</span></span>
<span class="line"><span style="color: #D8DEE9FF">        → </span><span style="color: #D8DEE9">Umidade</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">Sensor</span><span style="color: #D8DEE9FF"> tem</span><span style="color: #ECEFF4">:</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nome</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">unidade</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">valor</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">função</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">de</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">leitura</span></span>
<span class="line"></span></code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4bb.png" alt="💻" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Exemplo em C para ESP32</h2>



<h3 class="wp-block-heading">Estrutura Base</h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="typedef struct {
    char nome[20];
    char unidade[10];
    float valor;
    float (*lerValor)(void);  // ponteiro para função de leitura
} Sensor;
" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9">typedef</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">struct</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">char</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nome</span><span style="color: #D8DEE9FF">[</span><span style="color: #B48EAD">20</span><span style="color: #D8DEE9FF">]</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">char</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">unidade</span><span style="color: #D8DEE9FF">[</span><span style="color: #B48EAD">10</span><span style="color: #D8DEE9FF">]</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">float</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">valor</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">float</span><span style="color: #D8DEE9FF"> (</span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9">lerValor</span><span style="color: #D8DEE9FF">)(</span><span style="color: #81A1C1">void</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF">  </span><span style="color: #616E88">// ponteiro para função de leitura</span></span>
<span class="line"><span style="color: #ECEFF4">}</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Sensor</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span></code></pre></div>



<h3 class="wp-block-heading">Funções de Leitura Simuladas</h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="float lerTemperatura() {
    // Simula leitura de sensor
    return 25.0 + (rand() % 1000) / 100.0;
}

float lerUmidade() {
    return 40.0 + (rand() % 1000) / 100.0;
}
" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9">float</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">lerTemperatura</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #ECEFF4">    </span><span style="color: #616E88">// Simula leitura de sensor</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">return</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">25.0</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">+</span><span style="color: #D8DEE9FF"> (</span><span style="color: #88C0D0">rand</span><span style="color: #D8DEE9FF">() </span><span style="color: #81A1C1">%</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">1000</span><span style="color: #D8DEE9FF">) </span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">100.0</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">float</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">lerUmidade</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">return</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">40.0</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">+</span><span style="color: #D8DEE9FF"> (</span><span style="color: #88C0D0">rand</span><span style="color: #D8DEE9FF">() </span><span style="color: #81A1C1">%</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">1000</span><span style="color: #D8DEE9FF">) </span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">100.0</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span></code></pre></div>



<h3 class="wp-block-heading">Criando os Sensores</h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="Sensor sensorTemp = {
    .nome = &quot;Temperatura&quot;,
    .unidade = &quot;C&quot;,
    .lerValor = lerTemperatura
};

Sensor sensorUmi = {
    .nome = &quot;Umidade&quot;,
    .unidade = &quot;%&quot;,
    .lerValor = lerUmidade
};
" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9">Sensor</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">sensorTemp</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    .</span><span style="color: #D8DEE9">nome</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">Temperatura</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">    .</span><span style="color: #D8DEE9">unidade</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">C</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">    .</span><span style="color: #D8DEE9">lerValor</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">lerTemperatura</span></span>
<span class="line"><span style="color: #ECEFF4">}</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">Sensor</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">sensorUmi</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    .</span><span style="color: #D8DEE9">nome</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">Umidade</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">    .</span><span style="color: #D8DEE9">unidade</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">%</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">    .</span><span style="color: #D8DEE9">lerValor</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">lerUmidade</span></span>
<span class="line"><span style="color: #ECEFF4">}</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span></code></pre></div>



<h3 class="wp-block-heading">Leitura em Loop</h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="void loopSensores() {
    sensorTemp.valor = sensorTemp.lerValor();
    sensorUmi.valor = sensorUmi.lerValor();

    printf(&quot;Sensor: %s = %.2f %s\n&quot;, sensorTemp.nome, sensorTemp.valor, sensorTemp.unidade);
    printf(&quot;Sensor: %s = %.2f %s\n&quot;, sensorUmi.nome, sensorUmi.valor, sensorUmi.unidade);
}
" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">void</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">loopSensores</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">sensorTemp</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">valor</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">sensorTemp</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">lerValor</span><span style="color: #D8DEE9FF">()</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">sensorUmi</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">valor</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">sensorUmi</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">lerValor</span><span style="color: #D8DEE9FF">()</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">printf</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">Sensor: %s = %.2f %s</span><span style="color: #EBCB8B">\n</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">sensorTemp</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">nome</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">sensorTemp</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">valor</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">sensorTemp</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">unidade</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">printf</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">Sensor: %s = %.2f %s</span><span style="color: #EBCB8B">\n</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">sensorUmi</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">nome</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">sensorUmi</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">valor</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">sensorUmi</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">unidade</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span></code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9e9.png" alt="🧩" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Expandindo com Inferência Simples</h2>



<p class="wp-block-paragraph">Vamos fazer uma &#8220;regra ontológica&#8221; hardcoded:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="void verificarCondicoes() {
    if (sensorTemp.valor &gt; 60.0 &amp;&amp; sensorUmi.valor < 10.0) {
        printf(&quot;&#x26a0; Risco de superaquecimento e ar seco!\n&quot;);
    }
}
" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">void</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">verificarCondicoes</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> (</span><span style="color: #D8DEE9">sensorTemp</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">valor</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">60.0</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&amp;&amp;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">sensorUmi</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">valor</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">10.0</span><span style="color: #D8DEE9FF">) </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #88C0D0">printf</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">&#x26a0; Risco de superaquecimento e ar seco!</span><span style="color: #EBCB8B">\n</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span></code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f680.png" alt="🚀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Benefícios Concretos</h2>



<ul class="wp-block-list">
<li><strong>Reuso de código com base em tipos semânticos</strong></li>



<li><strong>Padronização do comportamento de sensores</strong></li>



<li><strong>Capacidade de diagnóstico automatizado</strong></li>



<li><strong>Facilidade para integração com sistemas semânticos (ex: OWL + MQTT + RDF)</strong></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f310.png" alt="🌐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Ontologia em Comunicação Semântica: Integrando ESP32 com MQTT</h2>



<p class="wp-block-paragraph">Além da modelagem local de sensores no firmware, as ontologias brilham quando utilizadas em sistemas <strong>distribuídos</strong>, permitindo que um sensor transmita dados <strong>já semânticos</strong>, ou seja, com significado explícito.</p>



<p class="wp-block-paragraph">Vamos ver como isso funciona na prática, criando uma camada que transmite dados com <strong>metadados semânticos</strong> usando MQTT — um dos protocolos mais populares em IoT.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9e0.png" alt="🧠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Estrutura da Mensagem Ontológica</h3>



<p class="wp-block-paragraph">Em vez de apenas transmitir <code>25.3</code>, transmitimos algo como:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="{
  &quot;sensor&quot;: &quot;Temperatura&quot;,
  &quot;valor&quot;: 25.3,
  &quot;unidade&quot;: &quot;C&quot;,
  &quot;contexto&quot;: &quot;ambiente_interno&quot;,
  &quot;tipo&quot;: &quot;observação&quot;,
  &quot;timestamp&quot;: 1711459200
}
" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">sensor</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">: </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">Temperatura</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">valor</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">: </span><span style="color: #B48EAD">25.3</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">unidade</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">: </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">C</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">contexto</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">: </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">ambiente_interno</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">tipo</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">: </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">observação</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">timestamp</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">: </span><span style="color: #B48EAD">1711459200</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">Essa estrutura, ainda que JSON simples, <strong>representa uma mini-ontologia em ação</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6f0.png" alt="🛰" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Enviando via MQTT com ESP32 (usando PubSubClient)</h2>



<h3 class="wp-block-heading">Instalação das dependências (no PlatformIO ou Arduino IDE)</h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="lib_deps =
  knolleary/PubSubClient
  bblanchon/ArduinoJson
" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9">lib_deps</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #D8DEE9">knolleary</span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9">PubSubClient</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #D8DEE9">bblanchon</span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9">ArduinoJson</span></span>
<span class="line"></span></code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Código para Envio com Ontologia JSON</h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="#include <WiFi.h&gt;
#include <PubSubClient.h&gt;
#include <ArduinoJson.h&gt;

WiFiClient espClient;
PubSubClient mqtt(espClient);

const char* ssid = &quot;SuaRedeWiFi&quot;;
const char* password = &quot;SenhaDaRede&quot;;
const char* mqttServer = &quot;broker.hivemq.com&quot;;

void conectarWiFi() {
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) delay(500);
}

void conectarMQTT() {
  mqtt.setServer(mqttServer, 1883);
  while (!mqtt.connected()) {
    mqtt.connect(&quot;esp32_ontologia&quot;);
  }
}
" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF">#</span><span style="color: #D8DEE9">include</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">WiFi</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">h</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">#</span><span style="color: #D8DEE9">include</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">PubSubClient</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">h</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">#</span><span style="color: #D8DEE9">include</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">ArduinoJson</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">h</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">WiFiClient</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">espClient</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9">PubSubClient</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">mqtt</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">espClient</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">const</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">char</span><span style="color: #D8DEE9FF">* ssid </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">SuaRedeWiFi</span><span style="color: #ECEFF4">&quot;</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #81A1C1">const</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">char</span><span style="color: #D8DEE9FF">* password </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">SenhaDaRede</span><span style="color: #ECEFF4">&quot;</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #81A1C1">const</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">char</span><span style="color: #D8DEE9FF">* mqttServer </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">broker.hivemq.com</span><span style="color: #ECEFF4">&quot;</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">void</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">conectarWiFi</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #D8DEE9">WiFi</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">begin</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">ssid</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">password</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">while</span><span style="color: #D8DEE9FF"> (</span><span style="color: #D8DEE9">WiFi</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">status</span><span style="color: #D8DEE9FF">() </span><span style="color: #81A1C1">!=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">WL_CONNECTED</span><span style="color: #D8DEE9FF">) </span><span style="color: #88C0D0">delay</span><span style="color: #D8DEE9FF">(</span><span style="color: #B48EAD">500</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">void</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">conectarMQTT</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #D8DEE9">mqtt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">setServer</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">mqttServer</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">1883</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">while</span><span style="color: #D8DEE9FF"> (</span><span style="color: #81A1C1">!</span><span style="color: #D8DEE9">mqtt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">connected</span><span style="color: #D8DEE9FF">()) </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">mqtt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">connect</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">esp32_ontologia</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span></code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Função para Enviar um Dado Semântico</h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="void enviarDadoOntologico(Sensor sensor, const char* contexto) {
  StaticJsonDocument<256&gt; doc;
  doc[&quot;sensor&quot;] = sensor.nome;
  doc[&quot;valor&quot;] = sensor.valor;
  doc[&quot;unidade&quot;] = sensor.unidade;
  doc[&quot;contexto&quot;] = contexto;
  doc[&quot;tipo&quot;] = &quot;observação&quot;;
  doc[&quot;timestamp&quot;] = millis();  // em produção use RTC ou NTP

  char mensagem[256];
  serializeJson(doc, mensagem);
  mqtt.publish(&quot;iot/esp32/sensores&quot;, mensagem);
}
" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">void</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">enviarDadoOntologico</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">Sensor</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">sensor</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">const</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">char</span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">contexto</span><span style="color: #D8DEE9FF">) </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #D8DEE9">StaticJsonDocument</span><span style="color: #81A1C1">&lt;</span><span style="color: #B48EAD">256</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">doc</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #D8DEE9">doc</span><span style="color: #D8DEE9FF">[</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">sensor</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">] </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">sensor</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">nome</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #D8DEE9">doc</span><span style="color: #D8DEE9FF">[</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">valor</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">] </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">sensor</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">valor</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #D8DEE9">doc</span><span style="color: #D8DEE9FF">[</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">unidade</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">] </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">sensor</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">unidade</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #D8DEE9">doc</span><span style="color: #D8DEE9FF">[</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">contexto</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">] </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">contexto</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #D8DEE9">doc</span><span style="color: #D8DEE9FF">[</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">tipo</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">] </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">observação</span><span style="color: #ECEFF4">&quot;</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #D8DEE9">doc</span><span style="color: #D8DEE9FF">[</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">timestamp</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">] </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">millis</span><span style="color: #D8DEE9FF">()</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF">  </span><span style="color: #616E88">// em produção use RTC ou NTP</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #D8DEE9">char</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">mensagem</span><span style="color: #D8DEE9FF">[</span><span style="color: #B48EAD">256</span><span style="color: #D8DEE9FF">]</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #88C0D0">serializeJson</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">doc</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">mensagem</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #D8DEE9">mqtt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">publish</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">iot/esp32/sensores</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">mensagem</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span></code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Uso no Loop</h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="void loop() {
  if (!mqtt.connected()) conectarMQTT();
  mqtt.loop();

  sensorTemp.valor = sensorTemp.lerValor();
  sensorUmi.valor = sensorUmi.lerValor();

  enviarDadoOntologico(sensorTemp, &quot;ambiente_interno&quot;);
  enviarDadoOntologico(sensorUmi, &quot;ambiente_interno&quot;);

  delay(5000);
}
" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">void</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">loop</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> (</span><span style="color: #81A1C1">!</span><span style="color: #D8DEE9">mqtt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">connected</span><span style="color: #D8DEE9FF">()) </span><span style="color: #88C0D0">conectarMQTT</span><span style="color: #D8DEE9FF">()</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #D8DEE9">mqtt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">loop</span><span style="color: #D8DEE9FF">()</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #D8DEE9">sensorTemp</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">valor</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">sensorTemp</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">lerValor</span><span style="color: #D8DEE9FF">()</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #D8DEE9">sensorUmi</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">valor</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">sensorUmi</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">lerValor</span><span style="color: #D8DEE9FF">()</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #88C0D0">enviarDadoOntologico</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">sensorTemp</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">ambiente_interno</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #88C0D0">enviarDadoOntologico</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">sensorUmi</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">ambiente_interno</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #88C0D0">delay</span><span style="color: #D8DEE9FF">(</span><span style="color: #B48EAD">5000</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span></code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f30d.png" alt="🌍" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Compatibilidade com Ontologias OWL/RDF</h2>



<p class="wp-block-paragraph">Esses dados, ao serem coletados no broker, podem ser <strong>convertidos para RDF</strong> ou consultados com <strong>SPARQL</strong>, caso estejam armazenados em uma base semântica (como o <a href="https://jena.apache.org/">Apache Jena</a>).</p>



<p class="wp-block-paragraph">Você pode criar um <strong>mapeamento semântico entre o JSON e uma ontologia OWL</strong>, como:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code=":Sensor rdf:type owl:Class .
:valor rdf:type owl:DatatypeProperty ; rdfs:domain :Sensor ; rdfs:range xsd:float .
" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF">:</span><span style="color: #D8DEE9">Sensor</span><span style="color: #D8DEE9FF"> rdf</span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">type</span><span style="color: #D8DEE9FF"> owl:Class .</span></span>
<span class="line"><span style="color: #D8DEE9FF">:valor rdf:type owl:DatatypeProperty </span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> rdfs</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF">domain </span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9">Sensor</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> rdfs</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9">range</span><span style="color: #D8DEE9FF"> xsd</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9">float</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">.</span></span>
<span class="line"></span></code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9ed.png" alt="🧭" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Benefícios de Integrar Ontologia com MQTT</h2>



<ul class="wp-block-list">
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f501.png" alt="🔁" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Reuso e composição automática de dados</strong></li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9e9.png" alt="🧩" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Integração com Knowledge Graphs e inferência</strong></li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Consulta semântica unificada de dispositivos heterogêneos</strong></li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6e0.png" alt="🛠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Facilidade de extensão: novos sensores, mesmos padrões</strong></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Conclusão</h2>



<p class="wp-block-paragraph">A introdução de ontologias no desenvolvimento de sistemas embarcados e IoT não é apenas uma questão teórica — é uma <strong>abordagem pragmática para lidar com complexidade, interoperabilidade e evolução dos sistemas</strong>. Mesmo em plataformas como o ESP32, com recursos limitados, é possível aplicar os princípios semânticos para criar sistemas mais inteligentes, autodescritivos e expansíveis.</p>



<p class="wp-block-paragraph"></p><p>The post <a href="https://mcu.tec.br/algoritimos/ontologias-aplicadas-a-sistemas-embarcados-e-iot/">Ontologias Aplicadas a Sistemas Embarcados e IoT</a> first appeared on <a href="https://mcu.tec.br">MCU & FPGA</a>.</p>]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">245</post-id>	</item>
	</channel>
</rss>
