Envie comandos AT para o ESP8266 a partir do Arduino Uno através de uma porta SoftwareSerial


10

OBJETIVO

No Arduino UNO, envie comandos AT para o ESP8266 por uma porta SoftwareSerial e receba resultados.

STATUS ATUAL

Eu envio comandos AT e não recebo nada de volta ( esquema de fiação 1 ) ou eu envio comandos AT e recebo lixo de volta ( esquema de fiação 2 ).

Usando o Arduino como passagem (conforme explicado no tutorial listado na seção de recursos), posso enviar comandos AT. Descobri que posso me comunicar com o ESP8266 em 115200 baud.

Estes são os resultados da execução AT+GMR:

AT version:0.40.0.0(Aug  8 2015 14:45:58)
SDK version:1.3.0
Ai-Thinker Technology Co.,Ltd.
Build:1.3.0.2 Sep 11 2015 11:48:04

ESQUEMA DE FIAÇÃO 1

!! Eu tenho o fio verde conectado ao pino 3 no Arduino Uno e o fio amarelo conectado ao pino 2; não 1 e 0 como a imagem sugere !!

insira a descrição da imagem aqui

ESQUEMA DE FIAÇÃO 2

A mesma fiação como acima, mas tenho RX e TX invertidos. O fio verde está conectado ao pino 2 e o fio amarelo está conectado ao pino 3.

CÓDIGO

Isso está sendo executado no Arduino Uno

#include <SoftwareSerial.h>

SoftwareSerial esp8266(2, 3);

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(115200);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  Serial.println("Started");

  // set the data rate for the SoftwareSerial port
  esp8266.begin(115200);
  esp8266.write("AT\r\n");
}

void loop() {
  if (esp8266.available()) {
    Serial.write(esp8266.read());
  }
  if (Serial.available()) {
    esp8266.write(Serial.read());
  }
}

RESULTADOS DO SKETCH EM EXECUÇÃO

Esquema de fiação 1

Started

Esquema de cablagem 2

Started
�����

Testei o ESP8266 através das instruções listadas no tutorial na seção Recursos que usei abaixo. O ESP8266 funciona bem ao enviar instruções por meio do prompt serial.

RECURSOS QUE EU USEI http://rancidbacon.com/files/kiwicon8/ESP8266_WiFi_Module_Quick_Start_Guide_v_1.0.4.pdf

QUESTÃO

Alguém sabe se o que estou tentando fazer é possível? E se for, o que estou fazendo de errado?


Tente, conforme sugerido no PDF, usar o arduino como um desvio para o serial (use as conexões como na imagem). Depois de tentar definir baud em 115200 e testá-lo usando o monitor serial. Você precisa enviar \ r \ n porque a linha termina também. Se o esp não responder, tente 9600 baudrate. Se você obtiver uma boa saída, vá para o software serial com a taxa de transmissão em funcionamento. Você também pode tentar atualizar o firmware do esp para a versão mais recente, se ainda não o tiver feito.
brtiberio

Você pode postar o código serial do software?
Magic-Mouse

@ Personalagem, Obrigado. Eu fiz essa solução de problemas (ou seja, verificando se posso enviar comandos AT usando o Arduino como um desvio). Descobri que posso me comunicar com o esp em 115200. Tentarei atualizar o firmware conforme sugerido.
Paul

@ Magic-Mouse SoftwareSerial é uma biblioteca fornecida pelo Arduino. Obrigado pela ajuda na pergunta, mas acho que não seria útil postar aqui a biblioteca.
Paul

Sei qual é a biblioteca serial do software, quero ver o código em que você usa a serial do software.
Magic-Mouse

Respostas:


9

Alguém sabe se o que estou tentando fazer é possível?

Absolutamente possível :)

E se for, o que estou fazendo de errado?

SoftwareSerial não é capaz de taxa de transmissão de 115200 (apesar de "permitir" isso como uma configuração). Alguns relatórios sugerem que 57600 é viável, embora, na minha experiência, 9600 seja melhor em termos de confiabilidade. Como alterar a taxa de transmissão no ESP8266 dependerá da versão do firmware. Eu tive sucesso com AT+IPR=9600. Você só precisa executar este comando uma vez (é uma configuração persistente). Eu sugeriria, com base na sua descrição, que este é o culpado mais provável que está causando a saída "lixo" que você descreve.

Algumas outras notas:

  • O ESP8266 é executado em 3v3, não 5v, portanto você não deve conectá-lo diretamente aos pinos digitais - é necessário executar um conversor de nível lógico. A execução de 5v pode prejudicar o seu ESP8266.
  • A saída 3v3 do Arduino possui corrente insuficiente para suportar o ESP8266 de forma confiável (50mA Arduino vs até 300mA para o ESP8266 por algumas contas) - tente executar o ESP8266 em um suprimento separado. Provavelmente não afetará comandos simples, ATmas quando você tenta se conectar a uma rede, etc., isso pode causar redefinições inesperadas do dispositivo.
  • Conforme observado por outras pessoas, você precisa enviar \ r \ n - portanto, verifique se a janela Serial está configurada para enviar os dois (isso é um menu suspenso na janela serial)

11
Observe que o AT + IPR às vezes pode gerar o ESP8266. Mais detalhes estão em: arduino.stackexchange.com/questions/24156/…
Emir

7

Bem, você pode tentar o seguinte:

Comece fazendo o upload do esboço intermitente no seu Arduino e conecte-o ao seu ESP8266 assim: TX-TX e RX-RX.

Agora abra o Serial Monitor e envie o comando AT e veja se ele responde. Nesse caso, você pode controlá-lo usando o seu Arduino conectando-o novamente ao TX-RX e RX-TX.

PS: Não se esqueça de definir a linha que termina no Monitor serial como Nova linha ou Retorno de carro.

Use este código para conectar-se ao ESP8266:

#include <SoftwareSerial.h>

const byte rxPin = 2; // Wire this to Tx Pin of ESP8266
const byte txPin = 3; // Wire this to Rx Pin of ESP8266

// We'll use a software serial interface to connect to ESP8266
SoftwareSerial ESP8266 (rxPin, txPin);

void setup() {
  Serial.begin(115200);
  ESP8266.begin(115200); // Change this to the baudrate used by ESP8266
  delay(1000); // Let the module self-initialize
}

void loop() {
  Serial.println("Sending an AT command...");
  ESP8266.println("AT");
  delay(30);
  while (ESP8266.available()){
     String inData = ESP8266.readStringUntil('\n');
     Serial.println("Got reponse from ESP8266: " + inData);
  }  
}

Como a interface serial do hardware ficará ocupada quando conectada ao computador, você precisará usar outra interface serial para se comunicar com o ESP8266. Nesse caso, o Software Serial é útil.


Embora esse link possa responder à pergunta, é melhor incluir aqui as partes essenciais da resposta e fornecer o link para referência. As respostas somente para links podem se tornar inválidas se a página vinculada for alterada. - Do comentário
Ricardo

11
Sim, acho que você está certo. Eu editei minha resposta.
Ikbel

@KiraSan Por que o atraso (30) é necessário?
Rahul Rastogi

@RahulRastogi apenas neste exemplo, você pode usar o atraso para permitir que o ESP responda, 30ms é apenas um valor aleatório, mas em um programa da vida real, você deve evitar isso e usar outro mecanismo para verificar a resposta.
Ikbel

1

Alguém sabe se o que estou tentando fazer é possível? É possível, eu fiz isso com 2 arduinos onde um estava simulando o ESP8266 (aguardando o pedido do ebay).

E se for, o que estou fazendo de errado?

O que você está fazendo está errado na maioria dos níveis, mas acho que você ficou mais acertado.

Uma idéia é implementar este pequeno companheiro: o deslocador de nível lógico salvará muitos problemas mais tarde.

No seu "WIRING SCHEME 1", você está usando a porta serial de hardware do arduino para conversar diretamente com o dispositivo como se estivesse conectado através de um cabo TTL ou FTDI.

Isso significa que, em teoria, o dispositivo arduino leria do hardware ao falar também do ESP8266; se você tiver outro arduino ou um cabo TTL, tente conectá-lo às portas 2 e 3 no arduino "principal" e você deverá obter um código semelhante. resultado, como no seu exemplo de resultado 2. Como você faria o proxy através do arduino. Caso contrário, seria um local para começar a depuração.

Além disso, eu só poderia recomendar você investir em um TTL 3,3v ou um conversor de nível lógico. Quando peguei meu cabo, tudo funcionou imediatamente.


1

Eu também tive muitos problemas. No meu caso, os problemas são quase resolvidos com a mudança do SoftwareSerial para o AltSoftSerial . Parecia que no Uno a biblioteca serial de software padrão não estava funcionando para mim. Depois de mudar, comecei a obter resultados pela primeira vez. (Eu também usei mudança de nível e fonte de alimentação externa para 3.3V)


E, por quase resolvido, quero dizer - ainda fico de vez em quando sem palavras no terminal. Portanto, mesmo o AltSoftSerial não é uma solução perfeita. Eu estava usando o ESP-07 com uma taxa de dados de 115200 bps.


Você pode adicionar à sua descrição? Seria útil saber como você conectou a conexão entre o Uno e o ESP. Obrigado!
dlu 31/12/15


0

Aqui estão algumas dicas ao usar o módulo ESP8266.

  1. Não use serial de software, pois não é confiável, especialmente em taxas de transmissão mais altas.

  2. Sempre conecte o módulo ESP ao computador e teste todos os comandos AT antes de interagir com o Arduino para garantir que você esteja trabalhando na direção certa

  3. Faça uma placa adaptadora de energia para tornar o módulo ESP compatível com a fonte Arduino 5v

Verifique também este link para obter mais detalhes

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.