Skip to main content

[Programa] SHT40 (exemplo I2C)

Objetivo:

Utilizar o ESP32-C6-DevKitM-1 para ler valores de temperatura de um sensor SHT40.

Lista de material:

  • ESP32-C6-DevKitM-1
  • Breadboards
  • Sensor SHT40
  • Fios de ligação 
  • Cabo micro USB 

8_material_list.png


Contextualização:

Grove - Temperature & Humidity Sensor (SHT40)

O sensor de temperatura e humidade da Seeed SHT40 é um sensor digital com interface I2C padrão [4].

Inter-Integrated Circuit (I2C) [5] 

O Inter-Integrated Circuit [5] é um barramento série que permite a co-existência de múltiplos controladores e periféricos (historicamente designado por master/slave) e considera essencialmente duas ligações:

SDA Serial Data Line
SDL Serial Clock Line

Ambos

são bidirecionais 8_i2c_a.pnge 8_i2c_b.pngpuxados por resistências. As tensões típicas utilizadas são de +5 V ou +3,3 V, embora sejam permitidos sistemas com outras tensões.

O design de referência I2C possui um espaço de endereço de 7 bits, com uma extensão de 10 bits raramente utilizada. As velocidades de barramento I2C comuns são o modo padrão de 100 kbit/s e o modo rápido de 400 kbit/s. Existe também um modo de baixa velocidade de 10 kbit/s, mas também são permitidas frequências de relógio arbitrariamente baixas. As revisões posteriores do I2C permitem alojar mais nós e funcionar a velocidades mais rápidas (modo rápido de 400 kbit/s, modo rápido plus de 1 Mbit/s, modo de alta velocidade de 3,4 Mbit/s e modo ultrarrápido de 5 Mbit/s ). Estas velocidades são mais amplamente utilizadas em sistemas embebidos do que em PCs.

A comunicação no I²C segue uma estrutura organizada em pacotes de dados. Cada transação no barramento I²C inicia com uma condição de start, seguida pelo envio de um byte de endereço, que identifica o dispositivo preriférico com o qual o controlador deseja comunicar. Após o endereço, o controlador pode enviar ou receber dados, dependendo da natureza da transação (escrita ou leitura).

Os principais elementos dos protocolos de mensagem do I²C incluem:

    Condição de Start (Start): O controlador gera uma transição do sinal SDA de alto para baixo enquanto SCL está alto, indicando o início de uma comunicação.

    Byte de Endereço: Após a condição de start, o controlador envia um byte de endereço que contém o endereço do periférico alvo e um bit de leitura/escrita. O periférico com o endereço correspondente responde com um bit de reconhecimento (ACK).

    Dados: Os dados são transmitidos em bytes, seguidos por um bit de reconhecimento (ACK) enviado pelo receptor após cada byte. Se o receptor não reconhecer o byte, ele envia um bit de não reconhecimento (NACK).

    Condição de Paragem (Stop): A comunicação termina com uma condição de stop, onde o controlador gera uma transição do sinal SDA de baixo para alto enquanto SCL está alto. Isso sinaliza o fim da transação no barramento I²C.

    Essa estrutura simples e eficiente permite que o I²C suporte a comunicação entre múltiplos dispositivos de forma organizada, minimizando a necessidade de fios e facilitando a integração em sistemas eletrónicos complexos.

    Desenvolvido pela Philips Semiconductor em 1982, o I2C é ideal para aplicações que exigem comunicação eficiente e de curto alcance entre componentes eletrónicos. Este protocolo suporta a comunicação entre múltiplos dispositivos, onde o dispositivo contolador comanda o barramento I2C e os peféricos respondem aos comandos recebidos. A simplicidade do I2C, combinada com a sua flexibilidade, torna-o uma escolha popular para interligar sensores, displays, memória e outros periféricos a microcontroladores em diversos projetos.

    De seguida apresenta-se uma aplicação prática do I2C usando a placa de desenvolvimento ESP32-C6-DevKitM-1, que possui suporte integrado para I2C, em conjunto com o sensor de temperatura e humidade SHT40.

    Procedimento:

    Atentando nos terminais 21, 22, GND e 3.3V do ESP32 como referência deve considerar-se o seguinte ilustração de montagem:

    8_i2c_setup.png

    Instruções:
    • Montar o circuito esquematizado anteriormente
    • Ligar a placa ESP32 ao computador por via de cabo USB micro
    • Abrir o IDE Arduino
    • Usando a ferramenta de gestão de bibliotecas do IDE Arduino procurar e instalar a biblioteca Adafruit SHT4X ([1])

    8_arduino_setup.png

    • Selecionar o dispositivo ESP32 adequado
    • Copiar o seguinte  
      /*
      * sensor sht40
      */
      
      #include "Adafruit_SHT4x.h" // Biblioteca relacionada com sensor SHT40
      
      // inicialização de classe relacionada com SHT40
      Adafruit_SHT4x sht4 = Adafruit_SHT4x();
      
      
      // a função setup é executada pontualmente quando o botão reset é premido ou 
      // a placa é alimentada:
      void setup() {
      	// inicializa a comunicação série a 115200 bits por segundo:
      	Serial.begin(115200); 
      	
      	sht4.begin(); 
      	
      	// definição de precisão e outras opções do sensor
      	sht4.setPrecision(SHT4X_HIGH_PRECISION);
      	sht4.setHeater(SHT4X_NO_HEATER);  
      }
      
      // a função loop é executada sucessivamente, uma e outra vez, 
      // e por aí em diante
      void loop() {
      	sensors_event_t humidade, temperatura;
      	
      	// atualiza os objetos com dados novos
      	sht4.getEvent(&humidade, &temperatura); 
      	
      	Serial.print("Temperatura: "); 
      	Serial.print(temperatura.temperature); 
      	Serial.println(" ºC");
      	Serial.print("Humidade: "); 
      	Serial.print(humidade.relative_humidity); 
      	Serial.println("% rH"); 
      	delay(1000);
      }
      • Compilar e carregar o código para a placa ESP32
      • Verificar o resultado
      8_img_out_a.png 8_img_out_b.png

      Referências:

      [1] Adafruit. Adafruit Sensirion SHT40, SHT41 & SHT45 Temperature & Humidity Sensors. url: https://learn.adafruit.com/adafruit-sht40-temperature-humidity-sensor (acedido em 29/08/2023).
      [2] Ltd. Espressif Systems Co. ESP32-DevKitC V4 Getting Started Guide. url: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/hw-reference/esp32/get-started-devkitc.html (acedido em 18/08/2023).
      [3] Paulo Menezes. Artigos de Suporte - DEEC - Kit Eletrónica - Primeiro Programa. url: https://kb.deec.uc.pt/books/deec/page/primeiro-programa (acedido em 17/08/2023).
      [4] Seeed Studio. Grove - Temperature & Humidity Sensor. url: https://wiki.seeedstudio.com/Grove-SHT4x/ (acedido em 29/08/2023).
      [5] Wikipedia. I2C. url: https://en.wikipedia.org/wiki/I%C2%B2C (acedido em 29/08/2023).