Arduino -> micro:bit -> Circuit Playground # 2

Gisterenavond laat plaatste ik al een kort bericht over mijn poging om een micro:bit aan de Circuit Playground te koppelen. Het werd uiteindelijk (voor nu) een koppeling tussen Arduino -> micro:bit -> Circuit Playground via een seriële verbinding (1 enkel kabeltje van apparaat naar apparaat). Nog niet via Bluetooth of andere draadloze verbinding vanaf smartphone etc, maar dit was een noodzakelijke eerste stap. Omdat ik nog wat vragen heb die ik ook wil kunnen voorleggen aan mensen die geen Nederlands begrijpen, doe ik de rest van de blogpost in het Engels.

Over to English:

After watching this video and reading the tutorial by Tony DiCola, I wondered if it would be possible to use a micro:bit as bluetooth bridge between my smartphone and the Circuit Playground. After all, the micro:bit has BLE and support for the serial protocol. Looking at the code that Tony provided however made it clear quickly enough that it would not be a simple cut-and-paste action. The code looked very complex and very much specific for the combination Circuit Playground <-> Bluefruit LE module. So I started looking for other code that would do the same, but was easier for me to understand.

The most basic example of serial communication via the TX/RX pins comes from Adruino themselves using SoftwareSerial. I loaded that example on the Circuit Playground. For the micro:bit I used the https://pxt.microbit.org/ editor which (in the advanced tab) has support for the serial interface of the micro:bit to create a simple script that should receive and display any data received and would send data on the press of a button. Test #1 nothing happened…

I will skip through an hour or 2 testing and trying without success until I ended up with 2 Arduino Leonardo boards connected via their hardware serial gpio ports (0 and 1). Yes, I crossed the wires so that one TX was connected to the other RX and vise versa. And it still did not work. Until I decided to not change the program code (which uses gpio 10 and 11) but instead move the wires. And suddenly it worked, serial connection was possible via SoftwareSerial, but nut while using pin 0 and 1. The image above shows the setup.

 

After this initial  success (finally!), I replaced one Arduino with the micro:bit. The code for the micro:bit look simple enough (see above). I uploaded all code to a bitbucket repository. If you look at the micro:bit code in the repository, it will display as hex code, just save the raw file, rename it from .txt to .hex if needed and import it into the online editor at https://pxt.microbit.org/ (using “Projects > Import File”).

Note: I did not use a voltage divider or a logic shifter for the signal going from the Arduino to the micro:bit. I did not check the voltage tolerance of the micro:bit,  but I expect that the Arduino outputs a 5V signal while the micro:bit only expects a 3.3V signal. Hooking up the micro:bit and the Circuit Playground, both using 3.3V should not be a problem.

The script that I used uses a counter on the Arduino, sending a number from the Arduino to the micro:bit which is then displayed. Because that worked, I tried connecting the micro:bit and the Circuit Playground. At first that worked, but as soon as I initiate the Circuit Playground object needed to control the Neopixels using

CircuitPlayground.begin(); 

the Circuit Playground stops sending data over the serial line. It can continue to receive data, it also does not throw an error, but no data is received on the other side anymore.

So that was the end result so far. Next step would be to either hookup an ESP8266 so that the Circuit Playground would gain WiFi access. Another option is to extend the micro:bit code to allow BLE access to the Circuit Playground via the micro:bit.

I am hoping Tony or someone else at Adafruit can shed light on the apparent conflict between SoftwareSerial and the CircuitPlayground library. And maybe an example of the use of Firmata over serial connection using a less specific device than the Bluefruit BLE device?

I will keep adding the code to the Bitbucket Repository so others can use it and build on it if they want.