Xiaomi Xiaofang IP Camera Hack

Just following the instructions here: http://automatedhome.party/2017/12/18/modify-the-xiaomi-xiaofang-camera-to-work-with-home-assistant-and-other-video-recording-software/


OpenCV 3.4.3 + Raspberry Pi 3B+

Follow these steps to install OpenCV 3.4.3 on a Raspberry Pi 3B+:

1) Install these dependencies:

$ sudo apt-get install build-essential cmake pkg-config
$ sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
$ sudo apt-get install libxvidcore-dev libx264-dev
$ sudo apt-get install libgtk2.0-dev libgtk-3-dev
$ sudo apt-get install libatlas-base-dev gfortran
$ sudo apt-get install python2.7-dev python3-dev

2) Get OpenCV

$ wget https://github.com/opencv/opencv/archive/3.4.3.zip
$ unzip 3.4.3.zip
$ rm 3.4.3.zip
$ wget https://github.com/opencv/opencv_contrib/archive/3.4.3.zip
$ unzip 3.4.3.zip

3) Build & Install OpenCV
NOTE 1: In the cmake line there is a path to the opencv_contrib modules folder, please replace this path with the correct one for your system.

NOTE 2: The make step will take like 8-10 hours and it will crash several times due to low virtual memory. Luckily it can resume from where it crashes so I kept repeating the make command until it finished.

sudo apt-get install python-pip
pip install numpy
$ cd ~/opencv-3.4.3/
$ mkdir build
$ cd build
$ make -j4
$ sudo make install
$ sudo ldconfig

4) Confirm OpenCV installation

$ python
>>> import cv2
>>> cv2.__version__

5) Voila!

NodeMCU and Nokia 5110 LCD

I’m using a NodeMCU 1.0 (ESP8266/ESP-12E) and a Nokia 5110 LCD (driven by PCD8544). Both are 3.3V so you can connect them directly. The following libraries are required:

  • Adafruit GFX Library
  • Adafruit PCD8544 Nokia 5110 LCD library

NOTE 1: The code in the library needs for this to work because it doesn’t include support for the ESP8266. The code change is small don’t worry, it is explained below.

NOTE 2: This method uses the hardware SPI on the NodeMCU. I tried using the software SPI and it didn’t work for me.

Here are the steps:

  1. Open Arduino IDE
  2. Click on Tools and then Manage Libraries
  3. Search for “Adafruit”
  4. Install “Adafruit GFX Library” and “Adafruit PCD8544 Nokia 5110 LCD library”
  5. Go to directory where the libraries are installed (normally C:\Users\USERNAME\Documents\Arduino\libraries\Adafruit_PCD8544_Nokia_5110_LCD_library)
  6. Edit Adafruit_PCD8544.cpp
  7. Look for the line “#include <avr/pgmspace.h>” and replace with this:
#ifdef ESP8266
  1. Edit Adafruit_PCD8544.h
  2. Look for the line “#ifdef __SAM3X8E__” and add this before the “#else” line:
#elif defined(ESP8266)
  typedef volatile uint32_t PortReg;
  typedef uint32_t PortMask;  
  1. From the Examples menu, open the “Adafruit PCD8544 Nokia 5110 LCD library\pcdtest” sketch. This sketch is a demo of the graphics capabilities.
  2. Look for the line “Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);” and comment it out
  3. Look for the line “// Adafruit_PCD8544 display = Adafruit_PCD8544(5, 4, 3);” and uncomment it and change it “Adafruit_PCD8544 display = Adafruit_PCD8544(D0, D1, D2);”
  1. Connect the wiring like this:
Nokia LCD--------------NodeMCU
  1. Compile and download
  2. Voila! 🙂

TIP: I noticed that the display was a bit dark. I fixed it by changing the contrast from 50 to 40. Look for the line “display.setContrast(50);” in the setup routine.

Serial Comms between NodeMCU & Arduino Nano

Here’s how to set up serial comms between a NodeMCU V1 (ESP-12E) and Arduino Nano. Note, you could replace the Nano with any Arduino board but I have only tested with a Nano.

Here are parts required:

Here’s the diagram:

circuitAnd the source code is available here: https://github.com/coytar/Snippets/tree/master/NodeMCU_To_Nano

Good luck! 🙂


HTTP GET using Volley

I was making an Android app using Android Studio (3.1.3) which sends a HTTP GET request. The code was very similar to this:

String serverURL = "";
URL url = new URL(serverURL);
HttpURLConnection connection = null;
try {
    connection = (HttpURLConnection) url.openConnection();
    BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
    //Do something with this InputStream
    // handle the response
    int status = connection.getResponseCode();
    // If response is not success
    if (status != 200) {
        throw new IOException("Post failed with error code " + status);
} catch (Exception e) {
} finally {
     if(connection != null)

The request was never sent. I tried everything but I just couldn’t make it work. However!

I found a solution using Volley (https://developer.android.com/training/volley/simple). This code is in Kotlin but as you can see it is very simple and mostly importantly it works!

val queue = Volley.newRequestQueue(this)
val url = ""
val stringRequest = StringRequest(Request.Method.GET, url, null, null)

Don’t forget to add these lines to the AndroidManifest.xml file:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />


NodeMCU ESP8266 CP1202 Programming (Blink)

This is the tutorial for programming the NodeMCU CP1202 board using the Arduino IDE. The code that will be used is the Blink example. And the board that I’m using looks like this.

Image result for cp1202 nodemcu

Here are the steps I followed:

  1. Install the drivers from https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers
  2. Download the ESP8266 board information for Arduino
    1. Open the Arduino IDE
    2. Click on the File menu and then Preferences
    3. In the Additional Boards Manager URLs, enter this: http://arduino.esp8266.com/stable/package_esp8266com_index.json
    4. Click Ok
    5. Click on the Tools menu, click Boards and then click Boards Manager
    6. Wait for it to download the new boards information
    7. Search for ESP8266 and install it
  3. From the Tools menu, select the following:
    1. Board: NodeMCU 1.0 (ESP-12E Module)
    2. Flash Size: 4M (3M SPIFFS)
    3. CPU Frequency: 80MHz
    4. Upload Speed: 115200
    5. Port: (whichever COM port it is)
    6. Erase Flash: Sketch Only
  4. From the File menu, click Examples, click ESP8266 and then click Blink
  5. Compile and download
  6. Voila! 🙂