Functional Programming with IOT (FIOT) – Day 2

Today is the day 2 of the FIOT, as discussed in the previous post i shall be exploring the ESP8266 with a mainstream software engineering functional programming(FP) language.

In my current employment, we work in Clojure due to the language’s pureness and immutability. There is a discussion on StackOverflow that you can follow to read more about it being “probably the closest” to functional.

Following is the picture of the hardware i have chosen for this experiment.

ESP8266 Programming Kit
ESP8266 Programming Kit

At this stage, we have a set hardware and programming language, now we need some sort of IDE to convert our code into binary right?

Wrong, it is not that simple.

Unfortunately, Clojure cannot be directly compiled into binary at this stage. So we would have to use an intermediate bridge to communicate with the hardware. This is where Firmata comes to the rescue. The concept is that your hardware will run a Firmata protocol server and you will use a client library to instruct the hardware to do the job. It is not ideal but it is one step forward then not using a functional programming language at all.

The Firmata protocol is based on the midi message format but fortunately, we don’t have to learn what they are as the client libraries are a good wrapper. Since we have picked Clojure we have the following client library choices:

I have chosen Clodiuno for this task simply because it has good documentation and the code is straight-forward. I noticed the examples in clj-Firmata are using channels in clojure which i don’t think is needed for a “hello world” program.

So lets start,

Step 1 is to load the Standard Firmata onto the ESP-01.

Connect the ESP-01 in programming mode with your computer.

ESP01 in Programming Mode
ESP01 in Programming Mode

Open Arduino IDE and from Files->Examples->Firmata, select StandardFirmata. Upload that onto the ESP-01, you should see something like this:

Ardunio IDE Firmata Upload
Ardunio IDE Firmata Uploaded

After loading the StandardFirmata onto the ESP-01 i have noticed that the built-in LED is always HIGH.

I am going to test the blinking LED example in Clojure to see if that works. Next step is to create a Clojure project. Then use the example provided by the Clodiuno for blinking LED.

From the Ardunio IDE, i know that my hardware is connected on “/dev/cu.wchusbserial1450” so i will replace that in the code for communication.

The next step is to compile and test the Clojure code. Fingers crossed.

Lets continue from here tomorrow and see what exciting results we get from the compilation.

I am looking forward to it.

Leave a Reply