Sming is one of the alternative firmware for the ESP8266 that is built on top of an extensive library that hides some of the ESP8266 SDK complexities. There is also another alternative firmware that is directly integrated with the Arduino IDE ESP8266 Arduino that mimics much of the process and ways off building Arduino sketchs that deploy and run on the ESP8266.
I’ve tried both, and for my tastes, since I prefer Netbeans or other editor to the Arduino IDE, I’ve choose to use the Sming firmware.
Setting up the SDK and Sming
For starting to use the Sming firmware, we should download the ESP8266 SDK and Sming from Github. The pfalcon esp-open-sdk is the fastest way to set up the SDK. Just do:
$ cd /opt $ git clone --recursive https://github.com/pfalcon/esp-open-sdk.git $ cd esp-open-sdk $ make STANDALONE=y
Make sure for running the above commands that you have the prerequisites installed for your platform.
The make command will take a while depending of your internet speed and machine speed. It can take around 20 minutes or more.
For installing Sming, the Github site instructions explain what is needed. Basically it’s:
$ cd /opt $ git clone https://github.com/anakod/Sming.git
To use Sming we need to set our environment variables.
$ export ESP_HOME="/opt/esp-open-sdk"; $ export SMING_HOME="/opt/Sming/Sming";
But this change is not permanent and it won’t work with Netbeans without changing the Makefiles.
So we need to change the core Makefile to add permanently the paths to the SDK and SMING homes:
Set Sming environment paths permanently:
Just got to Sming home directory /opt/Sming/Sming and edit the file Makefile:
Change the lines (uncomment them, removing the #):
## Defaults for Sming Core ## ESP_HOME sets the path where ESP tools and SDK are located. ## Windows: # ESP_HOME = c:/Espressif ## MacOS / Linux: ESP_HOME = /opt/esp-open-sdk ## SMING_HOME sets the path where Sming framework is located. ## Windows: # SMING_HOME = c:/tools/sming/Sming # MacOS / Linux SMING_HOME = /opt/Sming/Sming ## COM port parameter is required to flash firmware correctly. ## Windows: # COM_PORT = COM3 # MacOS / Linux: # COM_PORT = /dev/tty.usbserial # Com port speed COM_SPEED = 115200
For each project demo that we are going to compile, at the root of the project we need to change/uncomment at the Makefile-user.mk file the same variables to define the same values. Otherwise Netbeans will complain that the SMING_HOME and ESP_HOME Variables are not defined. We can use the Netbeans itself to edit that file.
One final change is needed regarding the esptool.py that is used by Sming to flash the ESP8266 chips. The tool is made to run with Python 2 and on my Arch Machine I have both Python 3 and Python 2, being Python 3 the default. Due to this, the esptool might fail to run with the following error:
# Generating image... File "/opt/esp-open-sdk/esptool/esptool.py", line 135 print 'Connecting...' ^ SyntaxError: Missing parentheses in call to 'print' /opt/Sming/Sming/Makefile-project.mk:274: recipe for target 'out/build/app.out' failed make: *** [out/build/app.out] Error 1
So we need to edit the esptool.py file and change the header to use Python2:
Also the tool assumes that the ESP8266 is connected and available at the serial port ttyUSB0.
We can now go to one of the examples directory and compile one of the examples. Since I’m using my own developer board that uses serial RTS and DTR to enter “automagically” the ESP8266 in flash mode, I just need to do make at the root of the example directory. If needed we can flash again with the command make flash
And that’s it.
Just a word of caution, since my developer board uses the RTS and DTR lines, the Sming Make file calls the miniterm.py that doesn’t set the RTS and DTR lines to inactive state, and so keep the ESP8266 in reset mode. To solve this, just change the TERMINAL directory on the makefile of your platform located at Sming/Sming to something that works. EDIT: Or use CTRL-T + D and CTRL-T + R to reset the lines.
Setting Netbeans to compile with the Sming Framework
Important note/update: With the latest Netbeans 8.1 version, code completion doesn’t work. Use version 8.0.2 for now to solve the issue.
To use Netbeans, just open up Netbeans, and go to Tools->Options and select the C++ icon. If needed press the Activate button to enable C++ support.
The instructions are now very similar to those in this post Setting up Netbeans for ESP8266. Just make sure that you have the C++ plugin installed, and restart the IDE if necessary.
Then at the C++ Window Build Tools tab, just add a new Tool Collection, but this time the compiler path is /opt/esp-open-sdk/xtensa-lx106-elf, and ignore the error, but select the family as GNU. The error should be gone. Give it a name: ESP8266 Xtensa and press OK. Just set up now the path to the C compiler and C++ compiler located on the bin directory: /opt/esp-open-sdk/xtensa-lx106-elf/bin.
For making Netbeans Code completion work, we need to add the path to include files on the Xtensa compiler tools. Make sure that it’s the ESP8266 Xtensa compiler that is selected and add the following paths:
These might not be enough. It really depends on the project. Make sure that you add the include paths to both the C++ and C compiler.
I had to add the following paths at the Code Completion for the Xtensa compiler so the code completion could work without warnings on the SmingCore.h file with the latest Sming version:
Just add this directories the same way as the above screenshot.
Also at the project level properties it is necessary to add the project include directory so that the user_include.h file and others can be found.
And we are set!
Compiling Basic_Blink Project
Using Netbeans, just add a new C++ project with existing sources, and select the root directory of any of the examples, in this case, let’s choose the /opt/Sming/Basic_Blink. Just make sure that the compiler tools choosen is the ESP8266 Xtensa that we previously have defined. At start Netbeans will try to run the make command, and it might fail.
Just open on the project tree the Makefile-user.mk file and remove the comment from the lines defining the ESP_HOME and SMING_HOME paths.
Also select the Makefile, right click Make target->Add target and add the word flash as a target.
That’s it, we can now make the project and select Make Target->flash to flash to the device.