0

As part of a project I want to receive data on my arduino uno via a sensor, which is working fine. This data should be sent to a webserver where a node js with socket io is running. Therefore i bought a esp8266 and the corresponding adapter (https://www.amazon.de/gp/product/B01LZLVEJ4/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1).

In the IDE I have the following code:

    #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);
    }

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

    }

I use the serial monitor to perform my AT Commands and it seems to work some times, however there seems to be a problem with the output, for example if I type the command AT+CWLAP to display the Access Points. If I do so, it outputs something like:

    +CWLAP:(3,"WLAN-32CC39",-73,"10:c6:0f:2c:32:cc",1,65,0)
    +CWLAP:(3,"F1e:,:oMc:0(x8:1LN⸮⸮⸮:b),k7:,(-,36Ao-2,
    (e0e,C".66,Cwe8:"+L,:"+27:6L W79",944,Ab,::0(ot230( -5,CTO940PBc,63+3y8:")3,dc3
    "P4-ze6P!"80,3716

I should also note, that even if I input the same, the response differs, and sometimes it is just single characters that are wrong, e.g. "wigi" instead of "wifi". I tried different baud's for the esp8266 but the current one produces the least problems. So my questions here are:

1: Is there anything I am currently doing wrong while connecting to my local wifi network?

2: If there is a connection made, is there any way to connect to a socket io server as a client? Most Tutorials I have found have the arduino as a server. However, I want to have it as a client which communicates to a server. Therefore it should both be able to send and receive messages to/from the server.

Thanks in advance!

  • The baud rate is way too high for SoftwareSerial, try 9600 baud. Don't use AT commands. Either use a library that handles it for you, or program the ESP8266 directly. (I prefer the latter.) By the way, you have been ripped off on that adapter, you can get a WeMos D1 mini for $3.50 (which includes a USB connection etc. for programming). – tttapa Jan 30 '18 at 16:20
  • @tttapa Hello, thanks for the fast answer. I tried switching the baud rate, but when I set the esp8266 rate to 9600, there is no answer after the "AT" command. Even though you said not to use the AT commands, shouldn't it at least work? I searched for libraries but did not find any. By programming myself you mean writing directly in the code to the serial? Sorry I am not really comfortable with arduino development. Also what is wrong with the adapter, does the WeMos D1 do the same thing as the esp8266 and adapter combined? Thanks in advance – Clueless Jan 30 '18 at 18:32
  • Programming it directly means you program the ESP8266 (it is a very powerful microcontroller) instead of the Arduino or as well as the Arduino. It is much easier, more flexible, and more efficient than using AT commands. Take a look at the link I posted in my previous comment. How did you change the baud rate? You have to use AT+CIOBAUD=9600 (send it at a baud rate of 115200), then reupload the Arduino sketch with a baud rate of 9600 instead of 115200, then it should work. – tttapa Jan 30 '18 at 18:59
  • @tttapa Oh yes I see, I will try that then I think. Setting the baud rate via AT command makes sense, I tried that with both baud rates on 115200, and then executed your command. It returned "ERSOR", and I don't mean "ERROR". That is one of those weird character switches it constantly makes. Also do you have any experience with connecting to a websocket btw? – Clueless Jan 30 '18 at 19:07
  • try AT+UART_DEF=9600,8,1,0,0 – Juraj Jan 30 '18 at 20:04
1

Using the ESP8266 in general

The easiest, most flexible, and most efficient way is to program the ESP8266 directly.
If it is possible, have it replace the Arduino entirely. To do this, it is best to get an ESP8266 development board that breaks out all IO pins and has a USB interface for easy programming. Programming these development boards is just like programming an Arduino: plug in the USB connection and hit upload in the Arduino IDE. One of my favourites is the WeMos D1 mini (around $3.50 from China).
The ESP8266 is a very powerful microcontroller on its own: it has a 32-bit processor that runs 10 times faster than an Arduino Uno, it has up to 4MB of flash memory (vs 32KB on the Uno), 160KB of RAM (vs 2KB on the Uno). It has 11 digital IO pins, an analog input, support for I²C, SPI, PWM, etc., just like an Arduino. If you use AT commands, you don't use its full potential.

Your specific situation

Given that you already bought an ESP-01 + adapter that only gives you access to the UART, connecting the sensor to the ESP directly is probably not possible.
In this case, you can do one of three things:

1) Program the ESP8266 directly: Write a program that just reads a number from the serial port, and sends it to the server over WiFi.
This is the easiest, because you can use all features of the ESP8266, and you don't have to change the program that you wrote for the Arduino (it should just measure the sensor value, and send it to the ESP8266 over the serial port, this is exactly the same as sending it to the serial monitor on your computer).

2) Don't program the ESP8266, but use an AT commands library on the Arduino. (For example WiFiEsp)
The downside is that you have to make significant changes to your Arduino sketch, and that you cannot use all of the functions and resources of the ESP.

3) Control the ESP8266 using AT commands yourself, without any libraries.
This is very cumbersome, and is a complete waste of time, IMHO.

Practical

Programming the ESP8266 directly
To program the ESP8266 directly (both with an Arduino and stand-alone), you need a USB-to-Serial converter. You can either use something like an FT232 (3.3V) or an Arduino. How to program it is covered here. If you use an Arduino as USB-to-Serial adapter, the right connections are TX-TX, RX-RX.

Using AT commands or an AT commands library
If your Arduino has a hardware UART that is not used for programming the Arduino (e.g. Arduino Mega, Arduino Leonardo, Arduino Due, ...), you can use this UART for communicating with the ESP8266. The right connections are TX-RX, RX-TX. You can use any baud rate that's supported by both devices (9600 - 921600).
If your Arduino doesn't have an extra hardware UART, you'll have to use the UART on pins 0 and 1, that's used for programming, and you'll have to disconnect the ESP8266 every time you upload new firmware to the Arduino.
Alternatively, you can use SoftwareSerial. Keep in mind that this is far from an optimal solution, as it uses a lot of resources, it is very slow, and data might get corrupted if you spend a lot of time in interrupts on the Arduino.
To use the ESP8266 with SoftwareSerial, you need to lower the baud rate to 9600 baud. To do this, first upload an empty sketch (bare minimum) to the Arduino to make sure that the hardware UART is not used. Then connect the ESP8266 to pins 0 and 1: TX-TX, RX-RX.
Open the Serial Monitor from the Arduino IDE, and select the baud rate that the ESP8266 is currently operating at. (This is probably 115200, but it could be something else.) Select "Both NL + CR" as the line ending, and send "AT" (without the quotes) to verify that it is working. If everything works, it should answer with "OK". If it doesn't, check your hardware, or try a different baud rate. Finally, send "AT+UART_DEF=9600,8,1,0,0" to set the baud rate to 9600 baud. Then change the baud rate of the serial monitor to 9600 as well. Send "AT" again to verify that it is working.
Now you can connect the ESP8266 to the SoftwareSerial pins, using a baud rate of 9600 baud.

Edit: The WebSocket protocol is not supported using AT commands, so you have no other choice but to program the ESP8266 directly.

  • 4) WiFi Link firmware and library github.com/jandrassy/arduino-library-wifilink/blob/master/… – Juraj Jan 30 '18 at 20:07
  • you can use websockets vith WiFi Link library WiFiClient object – Juraj Jan 30 '18 at 20:14
  • btw: WiFi Link firmware is a sketch for the esp8266 – Juraj Jan 30 '18 at 20:19
  • Wow, thank you botch soo much for that detailed answer, I will look into it, and am optimistic. Thanks for being patient, it is appreciated! – Clueless Jan 30 '18 at 20:22

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.