A placa MBZ Wifi tem dois microcontroladores, o ATMega328P e o ESP8266, que podem trocar dados através de uma comunicação serial.
Os pinos RX/TX da ESP8266 estão ligados com os pinos D2/D3 do ATMega328P, desta forma, utilizando a biblioteca SoftwareSerial os dois microcontroladores podem estabelecer uma comunicação serial bilateral.
Se o seu projeto usar comunicação serial entre o ATMega328P e o ESP8266, os pinos D2 e D3 do ATMega328P não devem ser utilizados para outra finalidade.
A velocidade recomendada para esta comunicação é no máximo 19200 bps.
Siga as orientações abaixo:
obs: por default, a MBZ vem com o ESP8266 carregado com o firmware de comandos AT, se você programar o ESP8266 com seu próprio código, esse firmware será sobre-escrito.
Clique aqui para ver como restaurar o firmware de comandos AT do ESP-01
1) Instalar suporte para a ESP8266 na IDE do Arduino
Para poder programar a ESP8266, você precisa fazer a seguinte configuração na IDE do Arduino:1.1) abra a opção "Preferências";
1.2) no item "URLs Adicionais para Gerenciadores de Placas" digite a URL:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
1.3) pressione o botão "Ok"
2.1) Mude os jumpers perto do conector FDTI para a posição "atmega":
2.2) Selecione no menu "Ferramentas" a placa "Arduino/Genuino Uno":
2.3) Crie um "programa em branco", selecionando "Novo" no menu "Arquivo", compile e faça o upload para o ATMega328P:
Assim que chega uma mensagem, ele verifica qual é solicitação e devolve a string correspondente.
3.1) Conecte uma fonte de alimentação externa
3.2) Selecione no menu "Ferramentas" a placa "Generic ESP8266 Module":
3.3) Mude os jumpers perto do conector FDTI para a posição "esp". Mude os jumpers perto do ESP8266 conforme a imagem abaixo:
3.4) Pressione o botão "ESP_reset"
3.5) Compile e faça o upload do programa abaixo para o ESP8266:
Programa mbz_serial_esp.ino
3.7) Pressione o botão "ESP_reset"
4.1) Selecione no menu "Ferramentas" a placa "Generic ESP8266 Module":
4.3) Compile e faça o upload do programa abaixo para o ATMega328P:
Programa mbz_serial_atmega.ino
5.2) Selecione a velocidade "19200"
Se tudo deu certo você verá as mensagens de requisição (ATMega328P) e resposta (ESP8266).
Este exemplo é bem simples, feito apenas para ilustrar como a comunicação serial pode ser implementada entre os dois microcontroladores.
Você poderá melhorar essa comunicação acrescentando mais controles, checagem de dados (CRC), etc.
2) Limpar programa no ATMega328P
Para evitar erros de upload de programa para o ESP8266, é aconselhável limpar o programa no ATMega328P.2.1) Mude os jumpers perto do conector FDTI para a posição "atmega":
2.2) Selecione no menu "Ferramentas" a placa "Arduino/Genuino Uno":
2.3) Crie um "programa em branco", selecionando "Novo" no menu "Arquivo", compile e faça o upload para o ATMega328P:
3) Carregar o programa de teste no ESP8266
O programa mbz_serial_esp.ino fica aguardando uma mensagem vindo da porta serial do ESP8266.Assim que chega uma mensagem, ele verifica qual é solicitação e devolve a string correspondente.
3.1) Conecte uma fonte de alimentação externa
3.2) Selecione no menu "Ferramentas" a placa "Generic ESP8266 Module":
3.3) Mude os jumpers perto do conector FDTI para a posição "esp". Mude os jumpers perto do ESP8266 conforme a imagem abaixo:
3.4) Pressione o botão "ESP_reset"
3.5) Compile e faça o upload do programa abaixo para o ESP8266:
Programa mbz_serial_esp.ino
#include <ESP8266WiFi.h> String strBuffer = ""; void setup() { Serial.begin(19200); Serial.setTimeout(3000); } void loop() { String command; if (Serial.available()) { command = Serial.readString(); // le dados da serial } if (!command.equals("")) { if (command == "pega_local") { Serial.print("Sao Paulo, BR"); // envia dados pela serial } if (command == "pega_clima") { Serial.print("Ensolarado, 27 graus"); // envia dados pela serial } } command = ""; delay(100); }
3.6) Mude os jumpers perto do ESP8266 conforme a imagem abaixo:
3.7) Pressione o botão "ESP_reset"
4) Carregar o programa de teste no ATMega328P
O programa mbz_serial_atmega.ino envia mensagens de requisição para o ESP8266 e fica aguardando uma mensagem de resposta.4.1) Selecione no menu "Ferramentas" a placa "Generic ESP8266 Module":
4.2) Mude os jumpers perto do conector FDTI para a posição "atmega":
4.3) Compile e faça o upload do programa abaixo para o ATMega328P:
Programa mbz_serial_atmega.ino
#include <SoftwareSerial.h> #define rxPin 2 #define txPin 3 SoftwareSerial EspSerial(rxPin, txPin); // RX, TX String strBuffer = ""; void setup() { Serial.begin(19200); EspSerial.begin(19200); } void loop() { Serial.println("> enviando comando para ESP-01: pega_local"); // envia requisição para ESP-01 e espera por até 5 segs a resposta sendData("pega_local", 5000); // exibe a resposta que foi guardada na variável strBuffer Serial.print("> resposta da ESP-01: "); Serial.println(strBuffer); Serial.println(); Serial.println("> enviando comando para ESP-01: pega_clima"); // envia requisição para ESP-01 e espera por até 5 segs a resposta sendData("pega_clima", 5000); // exibe a resposta que foi guardada na variável strBuffer Serial.print("> resposta da ESP-01: "); Serial.println(strBuffer); Serial.println(); delay(2000); } void sendData(String command, const int timeout) { strBuffer = ""; EspSerial.print(command); long int time = millis(); while ( (time + timeout) > millis()) { if (EspSerial.available() > 0) { strBuffer = EspSerial.readString(); break; } delay(1); } }
5) Testar a comunicação
5.1) Selecione no menu "Ferramentas" a opção "Monitor Serial"5.2) Selecione a velocidade "19200"
Se tudo deu certo você verá as mensagens de requisição (ATMega328P) e resposta (ESP8266).
Este exemplo é bem simples, feito apenas para ilustrar como a comunicação serial pode ser implementada entre os dois microcontroladores.
Você poderá melhorar essa comunicação acrescentando mais controles, checagem de dados (CRC), etc.
muito bom, parabens
ResponderExcluir