HELLO WORLD!

terça-feira, 8 de julho de 2025

Comunicação I2C entre NodeMCU e Arduino UNO (DIY)

Comunicação I2C entre NodeMCU e Arduino UNO

Introdução

O protocolo I2C é muito utilizado em projetos de eletrônica para comunicação entre dispositivos usando apenas dois fios:

  • SDA: linha de dados

  • SCL: linha de clock

Neste tutorial, vamos demonstrar como fazer a comunicação I2C entre dois microcontroladores:

  • Um Arduino Uno como escravo (slave)

  • Um NodeMCU ESP8266 como mestre (master)

Essa comunicação permite, por exemplo, que o NodeMCU envie comandos ou receba dados do Arduino Uno em um projeto maior, como automação residencial, monitoramento ou controle de sensores.

Materiais necessários

  • 1x NodeMCU (ESP8266)

  • 1x Arduino Uno

  • 2x Resistores pull-up de 4.7kΩ (opcional, mas recomendado)

  • Jumpers macho-macho

  • Protoboard

Ligações entre NodeMCU e Arduino Uno

Arduino Uno     NodeMCUFunção
A4    D2 (GPIO4)      SDA
A5    D1 (GPIO5)      SCL
GND    GND      Terra comum



Importante: Use resistores de 4.7kΩ entre SDA/SCL e o VCC de 3.3V para garantir sinal estável.

⚠️ NodeMCU usa 3.3V! Como o Arduino trabalha com 5V, em comunicação I2C geralmente é seguro pois o Arduino reconhece 3.3V como nível alto. Porém, se desejar segurança máxima, use um conversor de nível lógico.

Código do Arduino Uno (escravo)

#include <Wire.h> void setup() { Wire.begin(8); // Endereço I2C do Arduino como escravo Wire.onReceive(receberDados); Wire.onRequest(enviarDados); Serial.begin(9600); } void loop() { delay(100); } void receberDados(int bytes) { while (Wire.available()) { char c = Wire.read(); Serial.print("Recebido do NodeMCU: "); Serial.println(c); } }
void enviarDados() { Wire.write("OK"); // Resposta fixa ao mestre }

Código do NodeMCU (mestre)

#include <Wire.h> void setup() { Wire.begin(D2, D1); // SDA, SCL (GPIO4, GPIO5) Serial.begin(115200); } void loop() { Wire.beginTransmission(8); // Endereço do Arduino escravo Wire.write('H'); // Envia caractere Wire.endTransmission(); delay(100); Wire.requestFrom(8, 2); // Solicita 2 bytes do Arduino while (Wire.available()) { char c = Wire.read(); Serial.print("Resposta do Arduino: "); Serial.println(c); } delay(1000); }

Bibliotecas usadas

  • Wire.h: já vem incluída no IDE do Arduino e é compatível com o ESP8266

Se estiver usando o Arduino IDE com o NodeMCU, instale o pacote ESP8266:
Ferramentas > Placa > Gerenciador de Placas > ESP8266 by ESP8266 Community

Teste do projeto

  1. Faça as conexões conforme o esquema

  2. Carregue o código do Arduino Uno primeiro

  3. Em seguida, carregue o código no NodeMCU

  4. Abra o monitor serial do NodeMCU (baud 115200)

  5. Veja os dados sendo enviados e recebidos via I2C

Dicas de solução de problemas

  • Confirme que os fios SDA/SCL estão nos pinos corretos.

  • Use GND comum entre os dois dispositivos.

  • Se a comunicação falhar, adicione resistores pull-up de 4.7kΩ em SDA e SCL.

  • Verifique o endereço do escravo (aqui usamos 8, mas você pode mudar).

Conclusão

A comunicação I2C entre NodeMCU e Arduino Uno abre possibilidades interessantes para projetos que combinam as capacidades de conectividade do ESP8266 com sensores ou periféricos conectados ao Arduino. Com poucos fios, é possível criar um sistema robusto e eficiente.

Se quiser expandir, você pode:

  • Enviar dados analógicos ou sensores do Arduino para o ESP

  • Criar comandos do NodeMCU para controlar motores via Arduino

  • Integrar com interface web no ESP8266 para controlar todo o sistema

Nenhum comentário:

Postar um comentário

O que é um Bit na Eletrônica e na Programação?

O que é um Bit na Eletrônica e na Programação? Você já se perguntou o que realmente é um bit ? Essa pequena palavra de apenas três letras r...