Category Archives: Robotics Club

Programming an Arduino via WiFi with the ESP8266

Foreword

This is experimental and not exactly for beginners, something may be wrong. Proceed with caution or you can break something!

A (not so) brief introduction.

I’ve been working on a new robot called RoDI for a summer course at my Alma mater. RoDI is a low cost wireless robot to teach robotics and programming I started developing last year (reminder to self: I still need to post about it), but it wasn’t until a month ago that I started to work on it more often.

The first version used a HC-06 Bluetooth module to communicate with the computer. I wanted to to use WiFi, but the cost of the WiFi modules was a problem, since the idea was that the entire robot would cost less than 30 USD.

Then, I read about the ESP8266 WiFi modules on Hackaday, and started working on a new version of RoDI, this time with WiFi :D. I wanted to be able to flash the atmega328 inside the robot via WiFi because the robot doesn’t have a USB to Serial converter.

I found (again on HaD) a blog that showed how to flash an Arduino via WiFi with these modules, but it uses the ESP8266 to connect to a router, as we’re planning to have a few of this robots, and the student will take these robot and it doesn’t have another way of flashing the chip unless they have a programmer, so this method wouldn’t work for the robots. One thing that I learn from the blog was that I was going to need to use the transparent mode and, of course, use the module as an AP. Bad news, transparent mode is not available when using the module in server mode with the at_v0.20_on_SDKv0.9.3 version of the at command example. Time for hacking it!

After reading through the source code for the AT commands firmware I was able to enable transparent mode when using the module as a server. One security issue for this is that it supports up to 5 connections, so is not completely secure. I asked and got this response but wasn’t able to find that method (or variable?). I found another method that consist on configuring the AP using the wifi_softap_get_config method from the SDK, which lets us set the max_connection parameter. Yet another option is to add a password to the AP. But… we plan to use it only for robots in a summer course, so the security isn’t really important for now. 😉

Let’s get to work…

Connecting all together

CAUTION: This assumes you’re using a 3.3V Arduino. I’m not responsible for any broken Arduino or ESP8266 modules.

Simplified connection diagram

Simplified connection diagram

Mods

We need to do some modifications to the ESP8266 AT firmware, arduino bootloader and the programmer software in order to successfully use it to program the Arduino, here are the mods:

  1. I’ve added a new AT command called AT+RODI that set the module as an AP, starts the transparent server mode, configures the GPIO used for resetting the Arduino and starts a TCP server on port 1234. You can find the code on my esp8266_at fork on my github account. For a guide on how to install the toolchain, you can follow this guide. And for a script to build and program the ESP8266 you can take a look here. Note: to enter AT mode, send +++.
  2. Then I’ve modified Arduino’s bootloader to send the ” character so it can be picked up by the programmer script. You can find the modified code here. (I think this is not entirely necessary but made things easier for me) Update: After some testing, I found out that there is not necessary to modify the bootloader, you can omit this step.
  3. Lastly I’ve modified the python script programmer from sistemasorp to add support so it can work as a client connecting to the ESP8266 for programming. You can find the modified code here.

So, the steps needed are:

  1. Build modified AT firmware for the ESP8266.
  2. Program the new firmware onto the module.
  3. Compile the modified bootloader and flash it to the atmega using a programmer. I use the USBasp or the buspirate
  4. Connect via WiFi to the ESP8266’s AP. You should get an IP address like 192.168.4.100
  5. Run the following command specifying the the correct *.hex file
    ./program_rodi.py /tmp/build7763862112848895248.tmp/Blink.cpp.hex
    

Hope you found it useful!

Happy hacking!

Advertisements

Segunda Reunión del Club de Robótica de la FP-UNA

El sábado 8 de Octubre se realizó exitosamente la Segunda Reunión del Club de Robótica, realmente me sorprendió la cantidad de gente que asistió (aproximadamente 20 personas), ya que esto demuestra que hay mucho interés en este tipo de actividades dentro de la FP-UNA.

A modo de resumen, en la primera reunión hablamos un poco acerca de como surgió la idea de formar el club de robótica y también sobre algunas actividades que queremos realizar antes de que termine este año. Para poder llevar a cabo estas actividades hicimos una pequeña votación para ver por donde comenzar, la mayoría de los que asistieron comentaron que sería muy productivo comenzar con un curso introductorio de lenguaje C, lo que me pareció muy interesante para luego empezar ya a programar microcontroladores y armar nuestros primeros robots!

Así que después de suspender la (primera) segunda reunión (que debería llevarse a cabo el sabado 1 de Octubre pero tuvimos que cancelarla por culpa del mal tiempo), por fin pudimos reunirnos de vuelta. El curso introductorio de C estuvo a cargo del compañero Blas Mercado (Programador, FP-UNA) y fue dictado en uno de los laboratorios de informática de la facultad.

Blas explicando lenguaje C

Algo que vale la pena recalcar es que  mucha gente de informática estuvo ayudando a la gente que no tenía conocimientos de C durante la clase, esto demuestra la voluntad para compartir conocimientos de la gente que asistió. Es muy interesante ya que uno de los objetivos principales del club es justamente ese, integrar alumnos de diversas carreras.

Aproximadamente media hora antes de dar por terminada la reunión, di una pequeña introducción sobre microcontroladores para que la gente vaya viendo un poco más acerca del hardware que vamos a estar utilizando más adelante.

Lastimosamente como solo pudimos quedarnos hasta las 4 de la tarde, era muy temprano para ir a comer pizza como estaba planeado, para la próxima reunión espero que nos organicemos mejor para no dejar pasar otra vez!

En resumen, la reunión fue un éxito, y espero que la gente pueda seguir asistiendo y que se vaya sumando más gente.

Gracias a todos los que pudieron asistir y nos vemos en la próxima reunión.


Primera Competencia de Robots Sumo FP-UNA

El martes 20 pasado, durante la Exposición Tecnológica y Científica 2011 (ETyC), que se realiza anualmente en la Facultad Politécnica de la Universidad Nacional de Asunción, se llevó a cabo la Primera Competencia de Robots Sumo de la FP-UNA.

El evento fue auspiciado por la Cooperativa Universitaria, que proveyó los premios, y Servicio Electromédico Profesional S.A. que proveyó las remeras para el evento.

Este evento fue organizado para ser el primer evento del Club de Robótica de la FP-UNA, el mismo pretende ser un espacio para que alumnos de todos los semestres y carreras de la facultad puedan aprender electrónica, diseño de pcbs, soldadura, diseño y armado de robots, etc. además de ser un lugar en el que alumnos con intereses similares puedan conocerse y compartir conocimientos.

En el evento participaron cinco Robots, Poldestro, Valquiria, Thor, BoogerBot y Gladiador. La tabla de posiciones final fue la siguiente:

1er Puesto – Poldestro 4pts.

2do Puesto – Thor 3pts.

3er Puesto – Valquiria 2pts.

4to Puesto – Gladiador 1pts.

5to Puesto – BoogerBot 0pts.

Esta fue la primera edición de este evento que pretendemos poder organizar todos los años durante la ETyC

This slideshow requires JavaScript.

Muchas gracias a los auspiciantes por confiar en nosotros, a los participantes y a todos los que ayudaron a que esto fuera posible.