Envoyer des commandes AT à ESP8266 depuis Arduino Uno via un port SoftwareSerial


10

OBJECTIF

Depuis Arduino UNO, envoyez des commandes AT à ESP8266 via un port SoftwareSerial et recevez les résultats.

STATUT ACTUEL

J'envoie des commandes AT et je ne récupère rien ( schéma de câblage 1 ) ou j'envoie des commandes AT et je récupère des ordures ( schéma de câblage 2 ).

En utilisant l'Arduino comme un pass through (comme expliqué dans le tutoriel répertorié dans la section ressources), je peux envoyer des commandes AT. J'ai trouvé que je peux communiquer avec l'ESP8266 à 115200 bauds.

Ce sont les résultats de l'exécution 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

SCHÉMA DE CÂBLAGE 1

!! J'ai le fil vert attaché à la broche 3 sur l'Arduino Uno et le fil jaune attaché à la broche 2; pas 1 et 0 comme le suggère la photo !!

entrez la description de l'image ici

SCHÉMA DE CÂBLAGE 2

Même câblage que ci-dessus, mais j'ai inversé RX et TX. Le fil vert est attaché à la broche 2 et le fil jaune est attaché à la broche 3.

CODE

Cela fonctionne sur 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());
  }
}

RÉSULTATS DU CROQUIS EN COURS

Schéma de câblage 1

Started

Schéma de câblage 2

Started
�����

J'ai testé l'ESP8266 via les instructions répertoriées dans le didacticiel de la section Ressources que j'ai utilisées ci-dessous. L'ESP8266 fonctionne très bien lors de l'envoi des instructions via l'invite série.

RESSOURCES QUE J'AI UTILISÉES http://rancidbacon.com/files/kiwicon8/ESP8266_WiFi_Module_Quick_Start_Guide_v_1.0.4.pdf

QUESTION

Est-ce que quelqu'un sait si ce que j'essaie de faire est possible? Et si c'est le cas, que fais-je de mal?


Essayez comme suggéré dans le PDF pour utiliser Arduino comme un pontage vers la série (utilisez les connexions comme dans l'image). Après avoir essayé de régler le baud à 115200 et de le tester en utilisant un moniteur série. Vous devez également envoyer \ r \ n à la fin de la ligne. Si esp ne répond pas, essayez 9600 baudrate. Si vous obtenez une bonne sortie, passez au logiciel série avec le débit en bauds de travail. Vous pouvez également essayer de mettre à jour le firmware de esp vers la dernière version si ce n'est déjà fait.
brtiberio

Pouvez-vous publier le code de série du logiciel?
Magic-Mouse

@Personagem, merci. J'ai fait ce dépannage (c'est-à-dire en vérifiant que je peux envoyer des commandes AT en utilisant Arduino comme bypass). J'ai trouvé que je peux communiquer avec l'esp au 115200. Je vais essayer de mettre à jour le firmware comme vous l'avez suggéré.
Paul

@ Magic-Mouse SoftwareSerial est une bibliothèque fournie par, je crois, Arduino. Merci pour votre aide sur la question, mais je ne pense pas que la publication de la bibliothèque ici serait utile.
Paul

Je sais ce qu'est la bibliothèque de logiciels en série, je veux voir le code où vous utilisez le logiciel en série.
Magic-Mouse

Réponses:


9

Est-ce que quelqu'un sait si ce que j'essaie de faire est possible?

Absolument possible :)

Et si c'est le cas, que fais-je de mal?

SoftwareSerial n'est pas capable d'une vitesse de 115200 bauds (malgré "l'autorisation" comme paramètre). Certains rapports suggèrent que 57600 est réalisable, mais selon mon expérience, 9600 est le meilleur pour la fiabilité. La façon de modifier la vitesse de transmission sur l'ESP8266 dépendra de la version du micrologiciel. J'ai eu du succès avec AT+IPR=9600. Vous n'avez besoin d'exécuter cette commande qu'une seule fois (c'est un paramètre persistant). Je dirais, sur la base de votre description, que c'est le coupable le plus probable à l'origine de la sortie "poubelle" que vous décrivez.

Quelques autres notes:

  • L'ESP8266 fonctionne sur 3v3, pas sur 5v, vous ne devriez donc pas le connecter directement aux broches numériques - vous devez passer par un convertisseur de niveau logique. L'exécution de 5v peut faire frire votre ESP8266.
  • La sortie 3v3 de l'Arduino a un courant insuffisant pour prendre en charge de manière fiable l'ESP8266 (Arduino 50mA contre jusqu'à 300mA pour l'ESP8266 selon certains comptes) - et essayer de faire fonctionner l'ESP8266 avec une alimentation séparée. Cela n'affectera probablement pas les commandes simples comme, ATmais lorsque vous essayez de vous connecter à un réseau, etc., cela peut entraîner des réinitialisations inattendues de l'appareil.
  • Comme indiqué par d'autres, vous devez envoyer \ r \ n - assurez-vous donc que votre fenêtre série est configurée pour envoyer les deux (c'est une liste déroulante dans la fenêtre série)

1
Veuillez noter que AT + IPR peut parfois brique ESP8266. Plus de détails sont à: arduino.stackexchange.com/questions/24156/…
Emir

7

Eh bien, vous pouvez essayer ceci:

Commencez par télécharger un sketch clignotant sur votre Arduino puis connectez-le à votre ESP8266 comme ceci: TX-TX et RX-RX.

Maintenant, ouvrez Serial Monitor et envoyez la commande AT et voyez si elle répond. Si c'est le cas, vous pouvez le contrôler à l'aide de votre Arduino en le reliant à TX-RX et RX-TX.

PS: N'oubliez pas de définir la ligne se terminant dans le moniteur série sur Retour à la ligne ou Retour chariot.

Utilisez ce code pour vous connecter à 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);
  }  
}

Étant donné que l'interface matérielle série sera occupée lors de la connexion à l'ordinateur, vous devez utiliser une autre interface série pour communiquer avec votre ESP8266. Dans ce cas, Software Serial est pratique.


Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien de référence. Les réponses de lien uniquement peuvent devenir invalides si la page liée change. - De l'avis
Ricardo

1
Oui, je suppose que tu as raison. J'ai édité ma réponse.
Ikbel

@KiraSan pourquoi un délai (30) est requis?
Rahul Rastogi

@RahulRastogi juste pour cet exemple, vous pouvez utiliser le délai pour permettre à l'ESP de répondre, 30 ms n'est qu'une valeur aléatoire mais dans un programme réel, vous devez éviter cela et utiliser un autre mécanisme pour vérifier la réponse.
Ikbel

1

Est-ce que quelqu'un sait si ce que j'essaie de faire est possible? C'est possible, je l'ai fait avec 2 arduinos où l'un simulait ESP8266 (en attente de la commande ebay).

Et si c'est le cas, que fais-je de mal?

Ce que vous faites est mal à la plupart des niveaux, mais je pense que vous avez été le mieux réglé.

Une idée est d'implémenter ce petit gars: le changement de niveau logique, cela vous évitera de nombreux problèmes plus tard.

Sur votre "SCHÉMA DE CÂBLAGE 1", vous utilisez le port série matériel de l'arduino pour parler directement à l'appareil comme s'il était connecté via un câble TTL ou FTDI.

Cela signifie que le périphérique arduino lirait en théorie à partir du matériel lorsque vous parlez également de l'ESP8266, si vous avez un autre arduino ou un câble TTL, essayez de le connecter aux portes 2 et 3 de l'arduino "principal" et vous devriez obtenir un similaire résultat comme pour votre exemple de résultat 2. Puisque vous le feriez de cette façon, proxy via l'arduino. Sinon, ce serait un endroit pour commencer le débogage.

À côté de cela, je ne pouvais que vous recommander d'investir dans un TTL 3,3v ou un convertisseur de niveau logique. Quand j'ai eu mon câble, tout a fonctionné hors de la boîte.


1

J'ai aussi eu beaucoup de problèmes. Dans mon cas, les problèmes sont presque résolus en passant de SoftwareSerial à AltSoftSerial . Il semblait que sur l'Uno, la bibliothèque série de logiciels standard ne fonctionnait pas pour moi. Après avoir changé, j'ai commencé à obtenir des résultats pour la première fois. (J'ai également utilisé le décalage de niveau et l'alimentation externe pour 3,3 V)


Et par presque résolu, je veux dire - je reçois toujours, de temps en temps, du charabia sur le terminal. Ainsi, même AltSoftSerial n'est pas une solution parfaite. J'utilisais l'ESP-07 avec un débit de données de 115200 bps.


Pouvez-vous ajouter à votre description? Il serait utile de savoir comment vous avez câblé la connexion entre l'Uno et l'ESP. Merci!
dlu


0

Voici quelques conseils lors de l'utilisation du module ESP8266.

  1. N'utilisez pas de logiciel en série car il n'est pas fiable, en particulier à des taux de transmission plus élevés.

  2. Connectez toujours le module ESP à l'ordinateur et testez toutes les commandes AT avant d'interagir avec Arduino pour vous assurer que vous travaillez dans la bonne direction

  3. Faire une carte d'adaptateur d'alimentation pour rendre le module ESP compatible avec l'alimentation Arduino 5v

Consultez également ce lien pour plus de détails

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.