<?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/categorias/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.0</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>IoT-Lite: Ontologia Leve para Sistemas Embarcados e Internet das Coisas</title>
		<link>https://mcu.tec.br/algoritimos/iot-lite-ontologia-leve-para-sistemas-embarcados-e-internet-das-coisas/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=iot-lite-ontologia-leve-para-sistemas-embarcados-e-internet-das-coisas</link>
		
		<dc:creator><![CDATA[Carlos Delfino]]></dc:creator>
		<pubDate>Sat, 29 Mar 2025 00:47:33 +0000</pubDate>
				<category><![CDATA[Algoritimos]]></category>
		<category><![CDATA[ontologia]]></category>
		<category><![CDATA[arquitetura semântica para IoT]]></category>
		<category><![CDATA[interoperabilidade IoT]]></category>
		<category><![CDATA[IoT-Lite]]></category>
		<category><![CDATA[modelo semântico leve]]></category>
		<category><![CDATA[ontologia para IoT]]></category>
		<category><![CDATA[RDF para dispositivos embarcados]]></category>
		<category><![CDATA[semântica na Internet das Coisas]]></category>
		<category><![CDATA[sensores inteligentes]]></category>
		<category><![CDATA[sistemas embarcados]]></category>
		<category><![CDATA[SSN simplificada]]></category>
		<guid isPermaLink="false">https://mcu.tec.br/?p=279</guid>

					<description><![CDATA[<p>A crescente adoção de dispositivos conectados no contexto da Internet das Coisas (IoT) e de sistemas embarcados tem gerado uma necessidade urgente de padronização na forma como esses dispositivos representam, compartilham e processam informações. Nesse cenário, a ontologia surge como uma solução promissora para garantir a interoperabilidade semântica entre sistemas heterogêneos, permitindo que dispositivos com [&#8230;]</p>
<p>The post <a href="https://mcu.tec.br/algoritimos/iot-lite-ontologia-leve-para-sistemas-embarcados-e-internet-das-coisas/">IoT-Lite: Ontologia Leve para Sistemas Embarcados e Internet das Coisas</a> first appeared on <a href="https://mcu.tec.br">MCU & FPGA</a>.</p>]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">A crescente adoção de dispositivos conectados no contexto da Internet das Coisas (IoT) e de sistemas embarcados tem gerado uma necessidade urgente de padronização na forma como esses dispositivos representam, compartilham e processam informações. Nesse cenário, a ontologia surge como uma solução promissora para garantir a interoperabilidade semântica entre sistemas heterogêneos, permitindo que dispositivos com diferentes fabricantes, arquiteturas e finalidades possam &#8220;entender&#8221; uns aos outros de forma automatizada.</p>



<p class="wp-block-paragraph">No contexto da IoT, uma ontologia funciona como um modelo conceitual formal que descreve os principais elementos envolvidos – como sensores, atuadores, medições, localizações e capacidades – e as relações entre eles. Esse modelo permite que dados brutos gerados por sensores possam ser interpretados por diferentes aplicações de maneira contextualizada e precisa, viabilizando aplicações mais inteligentes e adaptativas.</p>



<p class="wp-block-paragraph">A proposta da ontologia<a href="https://www.w3.org/submissions/iot-lite/" title=""> <strong>IoT-Lite</strong></a>, submetida ao W3C (World Wide Web Consortium), é exatamente fornecer uma estrutura leve e eficiente para representar os principais conceitos e relações da IoT, sem comprometer os recursos limitados típicos de sistemas embarcados. Inspirada por modelos semânticos mais complexos como SSN (Semantic Sensor Network Ontology), a IoT-Lite se posiciona como uma solução intermediária: suficientemente expressiva para cobrir as necessidades centrais da IoT, mas leve o bastante para ser implementada em dispositivos com baixa capacidade de processamento e memória.</p>



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



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



<h2 class="wp-block-heading">Motivação e Problemas da Interoperabilidade na IoT</h2>



<p class="wp-block-paragraph">A Internet das Coisas promete integrar bilhões de dispositivos ao nosso cotidiano, desde sensores ambientais em áreas agrícolas até atuadores em sistemas industriais e dispositivos vestíveis na área da saúde. Contudo, a diversidade de plataformas, fabricantes, protocolos de comunicação e formatos de dados gera um dos maiores desafios do setor: a <strong>interoperabilidade</strong>.</p>



<p class="wp-block-paragraph">Tradicionalmente, a integração entre dispositivos IoT exige a criação de pontes, gateways e adaptadores específicos para cada caso, o que resulta em sistemas frágeis, difíceis de manter e escalar. Além disso, quando os dados são transmitidos sem um significado padronizado e compartilhável, sua interpretação correta por diferentes aplicações se torna incerta ou até impossível. Isso compromete seriamente a automação e a inteligência esperadas da IoT.</p>



<p class="wp-block-paragraph">A solução para esse dilema está em adotar modelos <strong>semânticos</strong>, que não apenas descrevam os dados, mas também seu significado. Nesse sentido, o uso de <strong>ontologias</strong> – como estruturas formais que definem conceitos e relacionamentos – permite que dispositivos e sistemas compartilhem uma base comum de entendimento. Isso reduz drasticamente a necessidade de adaptações manuais e favorece o desenvolvimento de aplicações genéricas, inteligentes e interoperáveis.</p>



<p class="wp-block-paragraph">A proposta da IoT-Lite nasce exatamente dessa motivação: criar uma <strong>ontologia enxuta</strong>, que forneça um vocabulário padronizado e compreensível por máquinas, com foco nos elementos essenciais da IoT e compatível com os recursos limitados de sistemas embarcados. Ao alinhar-se com padrões semânticos já consolidados, como o SSN e o DUL (DOLCE+DnS Ultralite), a IoT-Lite facilita a interoperabilidade ao mesmo tempo em que mantém um perfil leve e viável para implementação em campo.</p>



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



<h2 class="wp-block-heading">Visão Geral da Ontologia IoT-Lite</h2>



<p class="wp-block-paragraph">A ontologia <strong>IoT-Lite</strong> foi desenvolvida como uma simplificação do modelo SSN (Semantic Sensor Network Ontology), oferecendo um núcleo semântico básico para descrever os componentes fundamentais de um sistema IoT. Seu objetivo é facilitar a anotação semântica de sensores, atuadores, observações e seus contextos de forma leve, eficiente e extensível. Para isso, ela mantém compatibilidade com ontologias de maior abrangência, como <strong>SSN</strong>, <strong>DUL</strong> e <strong>WGS84</strong>, mas reduz a complexidade para torná-la adequada a ambientes com restrições computacionais, como os sistemas embarcados.</p>



<p class="wp-block-paragraph">O modelo IoT-Lite está organizado em torno de três conceitos centrais:</p>



<ol class="wp-block-list">
<li><strong>Coisas (Things)</strong> – Entidades físicas ou virtuais que possuem uma identidade e são associadas a sensores e/ou atuadores. Representam os elementos observáveis do mundo real.</li>



<li><strong>Dispositivos (Devices)</strong> – São os elementos físicos que possuem capacidades de sensoriamento ou atuação. Podem estar integrados a uma Coisa, medindo ou alterando alguma de suas propriedades.</li>



<li><strong>Serviços (Services)</strong> – Representam funcionalidades acessíveis por meio de uma interface, que podem estar associadas a dispositivos ou diretamente a Coisas.</li>
</ol>



<p class="wp-block-paragraph">Além desses, a ontologia define conceitos como <strong>Observações</strong>, <strong>Capacidades</strong>, <strong>Localização</strong>, <strong>Propriedades Observáveis</strong> e <strong>Atos de Atuação</strong>, permitindo que uma Coisa seja descrita de forma holística: o que ela é, onde está, o que pode ser medido nela e como ela pode ser controlada. Para representar esses conceitos e suas relações, a IoT-Lite utiliza o formato <strong>RDF (Resource Description Framework)</strong>, possibilitando sua integração com o ecossistema semântico da Web.</p>



<p class="wp-block-paragraph">Ao restringir o número de classes e propriedades e reutilizar vocabulários amplamente adotados (como <strong>WGS84</strong> para localização geográfica e <strong>DUL</strong> para estruturas ontológicas de base), a IoT-Lite torna-se uma excelente opção para aplicações embarcadas e distribuídas em larga escala, onde memória, processamento e largura de banda são recursos escassos.</p>



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



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



<h2 class="wp-block-heading">Principais Classes e Propriedades da IoT-Lite</h2>



<p class="wp-block-paragraph">A força da ontologia IoT-Lite está em sua simplicidade. Ela define um conjunto enxuto de <strong>classes</strong> e <strong>propriedades</strong> que permitem representar os elementos centrais de qualquer sistema IoT com profundidade semântica suficiente, mas sem sobrecarregar a implementação.</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="720" height="405" src="https://mcu.tec.br/wp-content/uploads/2025/03/image-19.png" alt="" class="wp-image-280" srcset="https://mcu.tec.br/wp-content/uploads/2025/03/image-19.png 720w, https://mcu.tec.br/wp-content/uploads/2025/03/image-19-300x169.png 300w" sizes="(max-width: 720px) 100vw, 720px" /></figure>



<h3 class="wp-block-heading">Classes Fundamentais</h3>



<ul class="wp-block-list">
<li><strong>iot-lite:Thing</strong> – Representa qualquer entidade física ou lógica do mundo real que se deseja monitorar ou controlar. Pode ser uma planta, um motor, uma sala ou mesmo um conceito virtual como um “grupo de dispositivos”.</li>



<li><strong>iot-lite:Device</strong> – Refere-se a sensores ou atuadores que interagem diretamente com a Thing. Um Device pode estar incorporado à Thing ou operá-la remotamente. Essa classe é conectada com a ontologia <strong>SSN</strong>, herdando sua semântica de sensores e atuadores.</li>



<li><strong>iot-lite:Service</strong> – Define uma interface funcional, como uma API REST, que permite acesso a dados ou o envio de comandos a um Device ou Thing.</li>



<li><strong>iot-lite:Property</strong> – Representa uma característica mensurável ou observável da Thing, como temperatura, umidade ou velocidade.</li>



<li><strong>iot-lite:Capability</strong> – Indica o que um Device pode fazer, como “medir temperatura entre -40°C e +125°C” ou “ligar/desligar uma válvula”.</li>



<li><strong>iot-lite:Observation</strong> – Descreve um evento de observação específico, vinculando um instante no tempo a uma medição realizada por um sensor sobre uma propriedade de uma Thing.</li>
</ul>



<h3 class="wp-block-heading">Propriedades-Chave</h3>



<ul class="wp-block-list">
<li><strong>iot-lite:hasDevice</strong> – Associa uma Thing a um ou mais dispositivos (sensores ou atuadores) que a monitoram ou controlam.</li>



<li><strong>iot-lite:exposes</strong> – Relaciona um dispositivo ou Thing a um Service que permite acessá-lo externamente.</li>



<li><strong>iot-lite:hasCapability</strong> – Liga um Device às suas Capacidades, especificando o tipo e a faixa de medições ou atuações.</li>



<li><strong>iot-lite:hasLocation</strong> – Usa vocabulários como <strong>WGS84</strong> para associar uma localização geográfica a uma Thing ou Device.</li>



<li><strong>iot-lite:observes</strong> – Indica que um sensor observa determinada Property.</li>



<li><strong>iot-lite:hasValue</strong> – Acompanha a Observation, contendo o valor resultante da medição, geralmente numérica.</li>
</ul>



<p class="wp-block-paragraph">Esse conjunto de classes e propriedades permite modelar a maioria das situações comuns em sistemas IoT e embarcados, como: “Um sensor de temperatura (Device) observa (observes) a temperatura ambiente (Property) de uma sala (Thing), e oferece o dado via um serviço web (Service)”.</p>



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



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



<h2 class="wp-block-heading">Exemplos de Uso da IoT-Lite em Sistemas Embarcados e IoT</h2>



<p class="wp-block-paragraph">A ontologia IoT-Lite encontra aplicações diretas em diversos cenários reais da Internet das Coisas, especialmente onde há restrições típicas de sistemas embarcados: memória limitada, baixa capacidade de processamento e conectividade intermitente. Ao oferecer um modelo semântico enxuto, ela permite representar contextos complexos com simplicidade e interoperabilidade.</p>



<h3 class="wp-block-heading">Monitoramento Ambiental com Sensores LoRa</h3>



<p class="wp-block-paragraph">Imagine um sistema embarcado com sensores de temperatura e umidade baseados em LoRaWAN (Long Range Wide Area Network), instalados em áreas agrícolas. Cada nó sensor pode ser descrito como uma instância da classe <strong>iot-lite:Thing</strong>, com um <strong>iot-lite:Device</strong> responsável por coletar os dados ambientais. As propriedades observadas, como temperatura e umidade, são modeladas como <strong>iot-lite:Property</strong>, e cada leitura se torna uma <strong>iot-lite:Observation</strong>, com localização atrelada via <strong>iot-lite:hasLocation</strong>. Esses dados são expostos por meio de um serviço REST modelado como <strong>iot-lite:Service</strong>. Com isso, mesmo sistemas heterogêneos (como plataformas web, aplicativos móveis ou sistemas de irrigação automatizados) conseguem compreender e utilizar os dados de forma uniforme e sem necessidade de adaptação específica.</p>



<h3 class="wp-block-heading">Automação Residencial com ESP32</h3>



<p class="wp-block-paragraph">Em um sistema doméstico automatizado utilizando microcontroladores ESP32, dispositivos embarcados controlam lâmpadas, cortinas e sensores de presença. Cada componente do ambiente é modelado como uma <strong>Thing</strong>, enquanto os módulos ESP32 são <strong>Devices</strong> com capacidades específicas de atuação (ligar/desligar, abrir/fechar). Um sensor de presença pode observar a propriedade &#8220;ocupação&#8221; e acionar um atuador para ligar as luzes. A integração entre sensores, atuadores e interfaces de controle (painéis ou comandos de voz) é mediada por <strong>Services</strong>, facilitando o desenvolvimento de assistentes inteligentes e plataformas de automação que compartilham a mesma semântica.</p>



<h3 class="wp-block-heading">Aplicações em Indústria 4.0</h3>



<p class="wp-block-paragraph">Em ambientes industriais, onde diversos sistemas embarcados operam equipamentos complexos, a IoT-Lite pode ser usada para descrever máquinas como <strong>Things</strong>, com sensores e atuadores associados como <strong>Devices</strong>, conectados a serviços que expõem medições, diagnósticos ou comandos. Isso permite a interoperabilidade entre sistemas SCADA, plataformas MES e algoritmos de manutenção preditiva baseados em IA, todos consumindo dados sob uma semântica comum.</p>



<p class="wp-block-paragraph">Em todos esses casos, a IoT-Lite permite a criação de descrições formais que podem ser processadas automaticamente por agentes inteligentes, promovendo integração, automação e escalabilidade — tudo isso sem exigir o uso de modelos pesados ou ontologias complexas.</p>



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



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



<h2 class="wp-block-heading">Vantagens e Limitações da IoT-Lite</h2>



<p class="wp-block-paragraph">A IoT-Lite se destaca como uma abordagem equilibrada entre expressividade semântica e viabilidade prática em ambientes restritos, como os sistemas embarcados. Seu maior diferencial é justamente sua leveza, o que a torna especialmente adequada para aplicações onde modelos ontológicos mais complexos seriam inviáveis.</p>



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



<p class="wp-block-paragraph">Uma das principais vantagens da IoT-Lite é sua <strong>compatibilidade com padrões consolidados</strong> como SSN e DUL, permitindo interoperabilidade com sistemas mais complexos sem exigir que os dispositivos de borda implementem toda a estrutura dessas ontologias. Ao focar em um subconjunto essencial de conceitos e relações, a IoT-Lite viabiliza <strong>anotações semânticas eficientes</strong> com um custo computacional mínimo.</p>



<p class="wp-block-paragraph">Além disso, sua <strong>flexibilidade de extensão</strong> permite que desenvolvedores adaptem a ontologia às necessidades específicas de seus domínios, sem quebrar a compatibilidade com os modelos de base. Essa característica é crucial para atender a requisitos variados em áreas como saúde, agronegócio, cidades inteligentes e automação industrial.</p>



<p class="wp-block-paragraph">Outra vantagem é a <strong>adoção facilitada de tecnologias da Web Semântica</strong>, como RDF e SPARQL, possibilitando consultas inteligentes e integração com outras fontes de dados. Isso abre caminho para agentes autônomos, aprendizado de máquina e sistemas de decisão baseados em contexto, todos operando sobre uma base semântica comum.</p>



<h3 class="wp-block-heading">Limitações</h3>



<p class="wp-block-paragraph">Por outro lado, essa leveza também impõe <strong>limitações em termos de expressividade</strong>. A IoT-Lite não cobre, por exemplo, aspectos avançados de dinâmica temporal, eventos complexos, incertezas em medições ou raciocínio sobre causalidade — recursos disponíveis em modelos mais sofisticados como SSN completo ou ontologias específicas de domínio.</p>



<p class="wp-block-paragraph">Outra limitação está no <strong>nível de adoção ainda restrito</strong>. Por ser um modelo leve e recente, a IoT-Lite ainda não é amplamente adotada em plataformas comerciais, o que pode gerar dificuldades na integração com soluções que utilizam vocabulários próprios ou não compatíveis com os padrões semânticos.</p>



<p class="wp-block-paragraph">Por fim, vale destacar que, embora a IoT-Lite seja orientada à simplicidade, ainda exige conhecimentos sobre ontologias, RDF e boas práticas da Web Semântica. Isso pode representar uma barreira de entrada para equipes com foco estritamente em desenvolvimento embarcado tradicional.</p>



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



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



<h2 class="wp-block-heading">Comparações com Outras Ontologias e Modelos Semânticos</h2>



<p class="wp-block-paragraph">Para entender melhor o posicionamento da IoT-Lite dentro do ecossistema semântico da IoT, é importante compará-la com outras ontologias amplamente utilizadas. A mais conhecida entre elas é a<a href="https://www.w3.org/2005/Incubator/ssn/ssnx/ssn" title=""> <strong>SSN (Semantic Sensor Network Ontology)</strong></a>, desenvolvida inicialmente pelo W3C em colaboração com a <a href="https://www.ogc.org/" title="">Open Geospatial Consortium (OGC)</a>. A SSN oferece um modelo extremamente completo e detalhado para descrever sensores, observações, sistemas de medição e seus contextos. No entanto, sua complexidade torna difícil sua aplicação direta em sistemas embarcados de baixo custo ou baixa capacidade computacional.</p>



<p class="wp-block-paragraph">A <strong>IoT-Lite</strong>, por sua vez, assume o papel de um subconjunto pragmático da SSN. Ao remover camadas de abstração e classes intermediárias menos utilizadas, ela oferece um núcleo funcional de conceitos essenciais que atende à maioria das aplicações práticas, com menor custo computacional. Essa simplificação a torna ideal para ambientes distribuídos e para dispositivos com conectividade intermitente ou recursos limitados, como microcontroladores e sensores autônomos.</p>



<p class="wp-block-paragraph">Outra comparação relevante é com o modelo <strong><a href="https://saref.etsi.org/" title="">SAREF (Smart Appliances REFerence ontology)</a></strong>, desenvolvido pela ETSI (European Telecommunications Standards Institute), voltado especialmente à interoperabilidade entre eletrodomésticos e redes inteligentes. Embora mais leve que a SSN, o SAREF é mais especializado em dispositivos de consumo e controle energético, enquanto a IoT-Lite é genérica e adaptável a diferentes domínios — de cidades inteligentes a agricultura de precisão.</p>



<p class="wp-block-paragraph">Também vale mencionar o uso de modelos como <strong>OWL-S</strong> (para serviços semânticos) e <strong>WOT Thing Description</strong> (da Web of Things), que propõem descrições baseadas em semântica para APIs REST. Embora compatíveis em conceito, esses modelos não oferecem um vocabulário leve e estruturado para descrever sensores e observações, algo que a IoT-Lite cobre de maneira direta.</p>



<p class="wp-block-paragraph">Assim, a IoT-Lite se posiciona como uma solução de meio-termo: mais simples e direta do que SSN, mais genérica do que SAREF, e mais voltada à descrição semântica do mundo físico do que os modelos puramente focados em serviços. Seu principal diferencial é equilibrar <strong>expressividade suficiente</strong> com <strong>baixa complexidade</strong>, o que a torna particularmente valiosa para aplicações em sistemas embarcados e IoT.</p>



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



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



<h2 class="wp-block-heading">Conclusão e Perspectivas Futuras</h2>



<p class="wp-block-paragraph">A ontologia <strong>IoT-Lite</strong> representa uma resposta prática e eficiente aos desafios de interoperabilidade semântica enfrentados por sistemas embarcados e aplicações de IoT. Ao oferecer um modelo leve, compatível com padrões consolidados e facilmente extensível, ela permite que dispositivos de baixa potência possam ser integrados de forma inteligente e coerente em arquiteturas maiores e mais complexas.</p>



<p class="wp-block-paragraph">A adoção de ontologias como a IoT-Lite promove um avanço importante na transição de sistemas isolados para ecossistemas realmente conectados e interativos. Ela viabiliza aplicações onde a <strong>compreensão automática do contexto</strong> é essencial — como manutenção preditiva, cidades inteligentes, automação residencial e monitoramento ambiental — mesmo em ambientes com recursos extremamente limitados.</p>



<p class="wp-block-paragraph">Para o futuro, espera-se que a IoT-Lite se consolide como um ponto de entrada para <strong>iniciativas semânticas mais ambiciosas</strong>, integrando-se com modelos de inteligência artificial, edge computing e arquiteturas orientadas a eventos. Além disso, com o avanço de tecnologias como <strong>Web of Things (WoT)</strong> e <strong>Digital Twins (gêmeos digitais)</strong>, a necessidade de modelos semânticos leves, interoperáveis e contextualizados será ainda mais crítica.</p>



<p class="wp-block-paragraph">Com iniciativas como a IoT-Lite, o caminho para um ecossistema IoT verdadeiramente inteligente e interoperável se torna mais viável, acessível e sustentável — não apenas para grandes indústrias, mas também para pequenos dispositivos embarcados que compõem a espinha dorsal desse universo conectado.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/><p>The post <a href="https://mcu.tec.br/algoritimos/iot-lite-ontologia-leve-para-sistemas-embarcados-e-internet-das-coisas/">IoT-Lite: Ontologia Leve para Sistemas Embarcados e Internet das Coisas</a> first appeared on <a href="https://mcu.tec.br">MCU & FPGA</a>.</p>]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">279</post-id>	</item>
		<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>
