2

G'day guys, I'm trying to get an ESP8266 to work with an Arduino Uno.
Here is the wiring.


wiringPicture

When I go to the serial monitor (115200 baud) and type: AT, there is not response from the ESP8266.

Is there something that I am missing?

I also have a servo motor connected, it works fine.

include "Arduino.h"
include "ESP8266.h"
include "dweet.h"
include "Servo.h"
define ESP8266_PIN_RX 10
define ESP8266_PIN_TX 11
define SERVO9G_PIN_SIG 2
const int servo9gRestPosition = 20;
const int servo9gTargetPosition = 150;
const char *SSID = "Wireless Network";
const char *PASSWORD = "wireless_password";
ESP8266 wifi(ESP8266_PIN_RX,ESP8266_PIN_TX);
Servo servo9g;
const int timeout = 10000;
char menuOption = 0;
long time0;
void setup() 
{
 Serial.begin(9600);
 while (!Serial); //await connection.
 Serial.println("start");
 wifi.init(SSID, PASSWORD);
 servo9g.attach(SERVO9G_PIN_SIG);
 servo9g.write(servo9gRestPosition);
 delay(100);
 servo9g.detach();
}
void loop() 
{ 
 servo9g.attach(SERVO9G_PIN_SIG); 
 servo9g.write(servo9gTargetPosition); 
 delay(500); 
 servo9g.write(servo9gRestPosition); 
 delay(500); 
 servo9g.detach(); 
}

I'm using the ESP8266 Library.
When trying to connect it just says Initializing device...

VE7JRO
2,51519 gold badges27 silver badges29 bronze badges
asked Jul 1, 2017 at 7:22
4
  • 1
    Arduino Uno is 5V; ESP8266 is 3.3V. I have tried that combination without level shifters and it doesn't seems to work. Currently I'm using nodeMCU with a Pro Mini, both 3.3V, communicating over I2C. You have two problems here: 1) Communication between Arduino and ESP8266; 2) Communication between ESP8266 and WiFi. Now, nodeMCU is a much capable board than Arduino if you don't need so many I/O pins. Better you discard the Arduino and keep the ESP8266. Commented Jul 1, 2017 at 9:38
  • 1
    "115200baud" and Serial.begin(9600);. Something doesn't match. Also powering a motor from an Arduino is never a good idea. Commented Jul 2, 2017 at 19:04
  • G'day mate, I have managed to flash the firmware with what I hope is the latest, I did the AT command and it said Ok, however when I did the command that allows you to see wireless networks, it says error. Also how do you reckon I hook the motor up? I read that the motor is 5v so i would have thought that it would be ok? Commented Jul 2, 2017 at 22:36
  • @user1234433222 thats another question Commented May 31, 2019 at 23:49

1 Answer 1

1

Unless you have some project constraints which make it mandatory to use naked ESP8266, why not use a NodeMCU to communicate with the Arduino in a master/slave relation over I2C?

enter image description here

#include <Wire.h> 
#define I2CAddressESPWifi 8

in setup()

Wire.begin(D1,D2); // SCL D1 SDA D2

then call from anywhere inside your loop() call this function

char readSlave(int x) { // send current time
 String xY = String(x);
 char c;
 int charArrayLength = xY.length()+1;
 char bufferChar[charArrayLength];
 Wire.beginTransmission(8);
 xY.toCharArray(bufferChar, charArrayLength);
 Wire.write(bufferChar);
 Wire.endTransmission();
 delay(10);
 Serial.print("wire sent: [");
 Serial.print(x);
 delay(50);//Wait for Slave to calculate response.
 int counter = 0;
 char buffMe[32];
 int bytesIn = Wire.requestFrom(8,32);
 while (Wire.available()) {
 delay(2);
 buffMe[counter] = Wire.read();
 /*
 c = Wire.read();
 Serial.print(c);
 */
 counter++;
 }
 delay(10);
 Wire.endTransmission(); 
 delay(500);
 Serial.print("] bytesIn: [");
 Serial.print(bytesIn);
 Serial.print("] buffMe: [");
 Serial.print(buffMe);
 Serial.print("]");
 return buffMe;
}

and your arduino will be waiting (setup)

Serial.begin(9600);
// slave listens for call from master NodeMCU
Wire.begin(I2CAddressESPWifi); // predefined as `8` or whatever address you choose
Wire.onReceive(receiveEvent);
Wire.onRequest(requestEvent);

and at the end of your code

void receiveEvent(int howMany) {
 if (howMany) {
 Serial.print("bytes[");
 Serial.print(howMany);
 Serial.print("] Received[");
 char charIn[howMany];
 int counter = 0;
 while (Wire.available()) {
 char c = Wire.read();
 charIn[counter] = c;
 //Serial.print(c);
 counter++;
 }
 delay(10);
 //do something with command from master
 }
}
void requestEvent() {
 char bufferChar[20] = "slave answer string"; // automatically null terminated extra character at end
 Serial.println(bufferChar);
 Wire.write(bufferChar);
}
answered Jun 1, 2019 at 0:15
1
  • 1
    thank you, I will purchase one and see how I go :) Commented Sep 18, 2019 at 3:46

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.