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...

  • 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. – user31481 Jul 1 '17 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. – gre_gor Jul 2 '17 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? – user1234433222 Jul 2 '17 at 22:36
  • @user1234433222 thats another question – tony gil May 31 at 23:49
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);
}
  • 1
    thank you, I will purchase one and see how I go :) – user1234433222 Sep 18 at 3:46

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.