Tuesday, May 9, 2017

Wemos ESP8266 - mDNS and OTA firmware update

Windows 10
Ubuntu Linux 16.04
Arduino IDE 1.8.1


Goal:

  • Test Multicast DNS (mDNS) and Over The Air (OTA) firmware update for using with IoT devices.

Status:

2017.05.09 - It's working.

ToDo:
  • Test OTA functions onStart, onEnd, onProgress and onError.

Code:

#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <Hash.h>
// OTA firmware update
#include <ESP8266HTTPUpdateServer.h>
const String DEVICE_ID  = "Test_OTA_mDNS_v0.0.1";
const char*  ssid       = "SSID";
const char*  password   = "pass";
const int    httpPort   = 8080; // OTA firmware update
#define      DEBUG        true
#define ARRAY_SIZE 6
String activeClients[ARRAY_SIZE];
ESP8266WiFiMulti WiFiMulti;
// OTA firmware update
ESP8266WebServer httpServer(httpPort);
ESP8266HTTPUpdateServer httpUpdater;
void setup() {
    Serial.begin(115200);
    if (DEBUG) Serial.println(DEVICE_ID);
    for(uint8_t t = 4; t > 0; t--) {
        if (DEBUG) Serial.printf("[SETUP] BOOT WAIT %d...\n", t);
        Serial.flush();
        delay(1000);
    }
    // ESP Chip Id
    if (DEBUG) Serial.println(ESP.getChipId());
    WiFiMulti.addAP(ssid, password);
    while(WiFiMulti.run() != WL_CONNECTED) {
        delay(100);
    }
    // ESP client IP
    if (DEBUG) Serial.println(WiFi.localIP());
    // OTA
    httpUpdater.setup(&httpServer);
    httpServer.begin();
    if(MDNS.begin("OTASom4r")) {
        if (DEBUG) Serial.println("MDNS responder started");
    }
    // Add service to MDNS
    MDNS.addService("http", "tcp", httpPort);
}
void loop() {
  httpServer.handleClient();  
}
/*
void onStart(OTA_CALLBACK(fn)) {
  Serial.println("onStart");
}
void onEnd(OTA_CALLBACK(fn)) {
  Serial.println("onEnd");
}
void onProgress(OTA_CALLBACK_PROGRESS(fn)) {
  Serial.println("onProgress");
}
void onError(OTA_CALLBACK_ERROR (fn)) {
  Serial.println("onError");

}
*/

Installing mDNS:

  • Windows:
    • Install Bonjour (included with Safari Browser for Windows).
  • Linux:
    • sudo apt-get update
    • sudo upt-get install libnss-mdns

Testing:


Site to upload new firmware.
Serial log while device is rebooting.


References:
If you like this content, feel free to

Sunday, June 26, 2016

Installing WebPy, SQLAlchemy and SQLite on Termux

Android 5
Termux 0.34 (Terminal emulator and Linux environment for Android)
WebPy 0.37
SQLAlchemy 1.0.13
SQLite 3.13.0


Installing packages on Termux:
  • apt update
  • Installing Python 2:
  • apt install python2
  • apt install nano
  • apt install openssh
Installing (Easy way) on Termux:
  • apt install sqlite
  • wget http://webpy.org/static/web.py-0.38.tar.gz
  • tar -xzvf  web.py-0.38.tar.gz
  • cd web.py-0.38
  • pyhton2 setup.py install
  • download SQLAlchemy package (http://www.sqlalchemy.org/download.html)
  • tar -xzvf  SQLAlchemy-1.1.5.tar.gz
  • cd SQLAlchemy-1.1.5
  • python2 setup.py install
Installing (Hard way) on Termux:
  • Installing easy_setup:
  • wget https://bootstrap.pypa.io/ez_setup.py -O - | python
  • IF it doesn't work this way:
  • THEN:
    • python2
    • $ import urllib2
    • $ response = urllib2.urlopen('https://bootstrap.pypa.io/ez_setup.py')
    • $ html = response.read()
    • $ f = open('ez_setup.py','w')
    • $ f.write(html)
    • $ f.close()
    • $ exit()
    • python2 ez_setup.py
  • Install WebPy framework:
  • easy_install web.py
  • Install SQLAlchemy:
  • easy_install sqlalchemy
  • Install SQLite:
  • download and extract SQLite3 zip files (DLL and Shell/Tools) to new folder (ex: c:\development\sqlite):

Testing:
  • nano webpy_test.py
    • import web
    • urls = (
    •     '/(.*)', 'hello'
    • )
    • app = web.application(urls, globals())

    • class hello:        
    •     def GET(self, name):
    •         if not name: 
    •             name = 'World'
    •         return 'Hello, ' + name + '!'

    • if __name__ == "__main__":
    •     app.run()
  • python2 webpy_test.py 8090
  • Connect using a REST client.


Links:

If you like this content, feel free to

Sunday, May 15, 2016

Updating firmware of Wi-Fi ESP8266 Module using FTDI

"This is one procedure for downloading and installing the latest available firmware on an ESP8266 using the flash tool provided by Espressif, the chip manufacturer."


Windows 10
PuTTY 0.67



Hint:

  • The operation of the ESP8266 outside of stated limits may be unstable and unreliable - you could damage your sanity.
  • The ESP8266 may draw more current than the 3.3V regulator on your Arduino can supply - you could damage your Arduino. Use a separate 3.3v power source.

Hardware:

  • ESP8266 - ESP01 module
  • FTDI - FT232RL module
  • StepDown 5v-3.3v module

Schematics:
Schematics using FTDI of 5v and a stepdown module




Downloads:


Installing the Firmware:

  • Power up your ESP connecting it to your PC.
  • Press and hold the Reset button, and then press and hold the Flash button. Release the Reset button, and then release the Flash button.
  • Click the box in the flash download tool GUI window labeled "SpiAutoSet," which will cause the download tool to automatically select the correct flash size and crystal frequency.
  • In the flash download tool GUI window, select checkbox on the left and click the START button.

Flash Download Tool DOS window

Flash Download Tool GUI window

  • Press and hold the Reset button, and then press and hold the Flash button. Release the Reset button, and then release the Flash button. Click the START button in the Flash Download Tool GUI window. The download should begin, and its progress should be shown in the Flash Download Tool GUI window and the log window, as depicted below.
Loading firmware

  • When the flash operation is complete, close the Flash Download Tool. Remove power from the ESP board, and then reconnect the power.

Testing:

  • Open PuTTY, and click the Serial radio button. Enter the COM port number (which must be less than 10) and the baud rate (which will most likely be 115200 or 9600.)
  • Click the Open button, and a PuTTY terminal session window should open.


  • Enable Caps Lock on your PC, and type AT, but don't press Enter. You should see AT in the PuTTY terminal window. If you don't, you may have selected the wrong COM port or the wrong baud rate. Close PuTTY and start again at the top of this section. The permissible baud rates are: 9600, 19200, 38400, 74880, 115200, 230400, 460800, and 921600; try each one in turn until you find the one that works.
  • Enable Caps Lock on your PC, and type AT, but don't press Enter. You should see AT in the PuTTY terminal window. Type a + sign followed by GMR. When you see AT+GMR in the PuTTY terminal window, while holding the Ctrl key down, press the M key followed by the J key. Release the Ctrl key. You should see the ESP8266 firmware information in the PuTTY terminal window similar to that shown in the picture below.




Links:

If you like this content, feel free to

Sunday, March 27, 2016

Install OpenCV and WebPy on Raspberry Pi

Raspbian
OpenCV


Install:
  • Install Raspberry Pi updates:
  • sudo apt-get update
  • sudo apt-get upgrade
  • sudo rpi-update
  • Reboot:
  • Install webpy:
  • cd ~
  • wget http://webpy.org/static/web.py-0.37.tar.gz
  • gzip -d -r web.py-0.37.tar.gz
  • tar -xvf web.py-0.37.tar 
  • cd ./web.py-0.37
  • sudo python setup.py install
  • Install OpenCV requirements:
  • sudo apt-get install build-essential cmake pkg-config
  • sudo apt-get install libgtk2.0-dev
  • sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
  • sudo apt-get install libatlas-base-dev gfortran
  • wget https://bootstrap.pypa.io/get-pip.py
  • sudo python get-pip.py
  • sudo pip install virtualenv virtualenvwrapper
  • sudo rm -rf ~/.cache/pip
  • Then, update your ~/.profile  file to include the following 3 lines:
  • # virtualenv and virtualenvwrapper
  • export WORKON_HOME=$HOME/.virtualenvs
  • source /usr/local/bin/virtualenvwrapper.sh
  • Reload profile:
  • source ~/.profile
  • mkvirtualenv cv
  • sudo apt-get install python2.7-dev
  • pip install numpy  (zzz... 45min)
  • Download and Install OpenCV:
  • wget -O opencv-2.4.10.zip http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.11/opencv-2.4.11.zip/download
  • unzip opencv-2.4.11.zip
  • cd opencv-2.4.11
  • mkdir build
  • cd build
  • cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_NEW_PYTHON_SUPPORT=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON  -D BUILD_EXAMPLES=ON ..
  • ???this or the last one??? cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON ..
  • Compile OpenCV:
  • make  (zzz... 9h)
  • sudo make install
  • sudo ldconfig
  • Check if installtion is ok:
  • ls /usr/local/lib/python2.7/dist-packages
  • But in order to utilize OpenCV within our cv  virtual environment, we first need to sym-link:
  • cd ~/.virtualenvs/cv/lib/python2.7/dist-packages/
  • ln -s /usr/local/lib/python2.7/dist-packages/cv2.so cv2.so
  • ln -s /usr/local/lib/python2.7/dist-packages/cv.py cv.py

Links:
If you like this content, feel free to

Monday, January 18, 2016

MobileSim - Simulator for Pioneer (MobileRobots) Robots

Windows 10

Aria 2.9.0.1  (32bits)
MobileSim 0.7.2

Status:
  • 2016.01.18 - Simulator (MobileSim) is working. Python example (simple.py) is working with MobileSim.

Todo:
  • Test java example.
Instalation on Windows:
  • Download and install ARIA SDK.
  • Configure PATH system variable - C:\Development\Aria_2.9.0-1_32bit\bin;C:\Development\Aria_2.9.0-1_32bit\python;C:\Development\Aria_2.9.0-1_32bit\java
  • Configure PYTHONPATH system variable - C:\Development\Aria_2.9.0-1_32bit\python
  • Download and install MobileSim.
Testing Python Examples:
  • cd \Development\Aria_2.9.0-1_32bit\PythonExamples
  • Start MobileSim, with C:\Development\Aria_2.9.0-1_32bit\maps\triangle.map
  • python simple.py




References:
If you like this content, feel free to

Wednesday, June 24, 2015

Installing Ubuntu 12.04 and ARIA (Pioneer API) on BeagleBone (White)

Windows 7
Ubuntu 12.04
Win32DiskImager
PuTTY 0.63
ARIA 2.9.0

Status:
  • 2015.06.24 - "ARIA has been installed in /usr/local/Aria".
  • 2015.06.24 - "ARIA has been installed in /usr/local/Aria" on Ubuntu 14.04. But ARIA APIs and demo app are running an error "ImportError: /usr/local/Aria/python/_AriaPy.so: cannot open shared object file:"

Installing Ubuntu 14.04 for BeagleBone:
  • Download Ubuntu for BeagleBone microSD card image (bone-ubuntu-14.04.2-console-armhf-2015-06-11-2gb.img.xz).
  • Write image to microSD card using Win32DiskImager.
  • Boot BeagleBone Board with RJ45 pluged.
  • Access BeagleBone with SSH client (user: ubuntu pass: temppwd)
  • Change sudo password:
  • sudo -i
  • passwd (ubuntu)
  • exit


Compiling ARIA from sources:
  • Installing dependencies to compile de sources:
  • sudo apt-get install binutils-multiarch gcc-4.6 build-essential swig python-dev python-setuptools python-serial
  • Configuring Enviroment to recompile ARIA files from sources:
  • Create PYTHONPATH and PYTHON_INCLUDE system variable:
  • sudo nano ~/.bashrc
  • Include these four lines below at the end of this file:
  • PYTHONPATH="/usr/local/Aria/python:${PYTHONPATH}"
  • export PYTHONPATH
  • PYTHON_INCLUDE="/usr/include/python2.7:${PYTHON_INCLUDE}"
  • export PYTHON_INCLUDE
  • Start a new shell or reload the config file by running the command below:
  • source ~/.bashrc
  • Download ARIA 2.9.0 - Other 32-bit Linux systems (Generic compressed TAR archive) with GCC 4.6
  • cd ~/
  • wget http://robots.mobilerobots.com/ARIA/download/current/ARIA-2.9.0+gcc4.6.tgz
  • tar -xzvf ARIA-2.9.0+gcc4.6.tgz
  • cd Aria-2.9.0/
  • sudo make install
  • The result is listed below:
------------------------------------------------------------------------------------
ARIA has been installed in /usr/local/Aria.

To be able to use the ARIA libraries, you must now add /usr/local/Aria/lib
to your LD_LIBRARY_PATH environment variable, or to the /etc/ld.so.conf system file,
then run 'ldconfig'
------------------------------------------------------------------------------------


  • Rebuild Python wrapper Library:
  • sudo nano ~/Aria-2.9.0/Makefile
  • CXX:=g++-4.6
  • PYTHON_INCLUDE:=/usr/include/python2.7
  • PYTHON_INCLUDE_FLAGS=-I/usr/include/python2.7
  • sudo make python   (zzz... +- 1h)
  • Setting enviroment variable:
  • sudo nano /etc/ld.so.conf.d/aria.conf
  • Include these two lines (below) on this file:
  • include /usr/local/Aria/lib
  • include /usr/local/Aria/python
  • configure dynamic linker run-time bindings:
  • sudo ldconfig


References:

If you like this content, feel free to

Sunday, April 12, 2015

Raspbian - Stream - Webcam+Motion Or Pi Camera+MMAL Motion

Raspbian v2015-02-16
Motion
MMAL Motion




Status:

  • 20150412 - It's working.
Notes:
  • Pi camera works at 10~14fps.
  • Webcam works at 30?fps.
  • Using 50% for jpeg quality and size: 256x144px (Pi Camera).
  • With this configuration, CPU use is about  33%~96% for motion with webcam, and about 19%~53% for mmal-motion and Pi Camera.
  • It only works with firefox (Windows and Android? version).

Installing Motion for Webcam:

  • Install Motion:
  • sudo mkdir /home/webcam
  • sudo chmod 777 /home/webcam
  • cd /home/webcam
  • sudo apt-get install motion
  • Configure Motion:
  • sudo nano /etc/motion/motion.conf
  • Changing config file:
  • daemon on
  • framerate 15
  • threshold 500
  • gap 10
  • max_mpeg_time 30
  • output_normal center
  • ffmpeg_video_codec msmpeg4
  • target_dir /home/webcam
  • webcam_motion on
  • webcam_maxrate 30
  • webcam_port 8085
  • webcam_localhost off
  • Configure autostart of Motion:
  • sudo nano /etc/default/motion
  • Start Motion:
  • sudo motion
  • Troubleshooting:
  • "cannot create process id file ..."
  • mkdir /var/run/motion
  • chmod a+rwxt /var/run/motion

Testing Motion for Webcam:

  • http://<Raspberry-pi_IP-address>:8085

Installing MMAL Motion for Pi Camera:

  • Install Motion, dependencies and MMAL Motion:
  • sudo apt-get install motion libjpeg62
  • cd ~/
  • mkdir mmal
  • cd mmal
  • wget https://www.dropbox.com/s/jw5r1wss32tdibb/motion-mmal-opt.tar.gz
  • tar -zxvf motion-mmal-opt.tar.gz
  • cd ./motion-mmal
  • Configure Motion:
  • nano motion-mmalcam.conf
  • Changing config file:
  • daemon on
  • gap 10
  • mmalcam_secondary_buffer_upscale 2
  • stream_secondary off  (ON to use with mmalcam_secondary_buffer_upscale)
  • output_secondary_pictures off  (ON to use with mmalcam_secondary_buffer_upscale)
  • ffmpeg_output_secondary_movies off (ON to use with mmalcam_secondary_buffer_upscale)
  • Start MMAL Motion:
  • cd ~/mmal/motion-mmal/
  • ./motion-mmal -n -c motion-mmalcam.conf
Testing  MMAL Motion for Pi Camera:
  • http://<Raspberry-pi_IP-address>:8081


References:

Other options for Streaming:
If you like this content, feel free to