Kaleidoscope example not working with Model 100

We followed the Kaleidoscope documentation [Build and install the latest firmware for your keyboard — Kaleidoscope documentation]

On Windows 11, installed the Arduino IDE (latest version 2.0.2) and following the instructions of the Kaleidoscope documentation left us with an non-working keyboard :-/

The example file opens a Model100.ino and a sketch.json with just

“cpu”: {
“fqbn”: “keyboardio:gd32:keyboardio_model_100”,
“port”: “”

The sketch.json does not seem to be a real example. Therefore we uploaded the Model100.ino file. That compiled fine and uploaded, but resulted in a keyboard with garbage, which did not react.

In Chrysalis it shows Firmware version 0.0. I could load a backup I had made from my layout. Then the keyboard works again, but still says Firmware 0.0.

We then tried to upload the sketch.json file. That did not change anything at all.

Where is a working example of the latest firmware, which might be used as a starting point for a custom firmware? How does one get that example working following the steps from the Kaleidoscope manual?

I was able to install the example model100.ino without any issues, but then again I am still on IDE 2.0.1

I am now a bit hesitating to move to IDE 2.0.2, in case that causes something to fail.

The behavior you described (a Model100.ino, and a sketch.json) matches what I see, and does not cause me concern. My personal sketch is broken into multiple files, with the sketch.json just describing the board being used. When I ask the Arduino IDE to verify the code, all the different files needed for my .ino are compiled, and they load fine for me.

As far as I know, the official Model100.ino seems to be here:

One thing you may want to try: reset the firmware on the keyboardio using Chrysalis. In my case, I put the keyboardio in programming mode by pressing the prog key before connecting the keyboardio. Chrysalis then recognizes the keyboardio, but complains that it needs to update the firmware. I then tell it to return to factory settings. Once that is done, I shut down Chrysalis, put the keyboardio back in programming mode, and load my sketch. Apparently, EEPROM has something to do with it not always working. I.e., if you load a firmware that uses EEPROM, change it, and then load another one, the second one may try to use the EEPROM contents that the first one had, and that usually fails. I had that issue many times.

Eventually, I gave up using EEPROM, and I have been able to go from one sketch to the next without any issues.

I will eventually try to use IDE 2.0.2, but I’d like to be able to return to the working one in case something goes wrong.

Shameless plugin: if you want, you can start with my sketch here:

It enables you to just select the board in Arduino IDE, and compile the sketch for the corresponding board. All the plugins I could fit in it have corresponding #define tags on the two configuration files (configurationModel01.h and configurationModel100.h), so I can more easily edit a single file and have the headers files, keymapping, and setup sections added/removed based on that. It has pretty much all I use, except that the passwords.h file is, of course, a fake one, since I do not want to publish that.

All those files show up on my Arduino IDE 2.0.1, and the .ino file includes the needed .h files depending on the board being used.

Update: I’ve moved to Arduino IDE 2.0.2, and now to 2.0.3, and there were no issues I could find. I did not do a clean install, however. I just updated the IDE.

@rpnfan did you ever resolve this issue? I’m encountering the same problem.

No, I’m busy learning a new layout and do not want to invest more time in Kaleidoscope right now. I think the most important things should be possible in Chrysalis, which IMO is lacking a few basic functions (as such and compared to the alternatives). I hope the missing functions will be implemented soon.

On the other side for my workflow I will mainly try to map most things via software, so it works also with my laptop or other standard keyboards.