This section is all about immediateC.
John Wulff is the man who created the language from the bottom up in the '80s as a reaction on the inefficient way PLCs were (and are still) handling tasks.
John lives in Australia, in the south-east region in a city called Mittagong. Before that, he lived in another Australian town called Bowen Mountain.
He's been a programmer since the early '60 and has seen the whole programming landscape changing dramatically to what it is today.
His favourite programming languages are C and Perl. A lot of his immediateC project is written in Perl, including UI tooling like iClive, iCbox and so on.
He even has written an iCman UI in Perl where you can open whatever man page you have. He has done an amazing job. And therefore, I salute him with a lot of respect.
You can find his immedateC website here.
PLCs are simply running a series of commands to check if something has to be adadpted or not. Even if nothing has changed, they're spending time in doing redundant, useless things.
immediateC is completely different: it replaces the PLC approach with a highly efficient processing. It only (re)acts if something has changes. Else, nothing is done. This is much more efficient and this will also prevent the situation where PLCs don't have enough time to execute lots of tasks and as such can't guarantee stuff is done within the time specified.
immediateC can cope with very strict timings and as such can do a lot more tasks compared to an ordinary PC.
I've picked up immedateC in 2012 when the German magazine ELV made a project with immedateC as the core of it. This can be seen in the ELV issues 05/2011, 06/2011 and 01/2012. At that time, I was looking for a suitable mechanism to set up my home automation system.
Since at that time the Raspberry Pi saw the light of day I switched to that SBC to start my home automation system, based on Pi4J. Since Pi4J had already a framework that supported the I/O expander MCP23017 (including I2C which was heavily borrowed from wiringPi, a famous library dedicated for the Raspberry Pi) I stepped into that adventure.
A few years later (must have been around 2016) my system was already partly up and running, but I wanted to do more things than were possible with Pi4J. I then contacted John for the very first time to ask for some information. Then I came to know his complete GitHub repository around immediateC.
However, at that time his immediateC system didn't support I2C but only SPI. Since all my I/O expanders (and also future devices) run on I2C, this was a no-go for me.
In the meantime, Pi4J did a huge reorganisation in its Pi4J framework which made me very unhappy. They removed all beautiful drivers they had for many, many components (MCP23017 was, as already said, one of them) and also moved over to another Java version and so on. In short, I was not pleased with the fact they dropped useful component drivers.
At the end of 2022 I was looking again to a kind of PLC control for my system but I bumped against the same wall: no I2C support.
Then I remembered John's language and I again contacted him with a very specific question: to be able to control a lot of MCP23017 devices spread over 8 different I2C busses, each bus being capable of controlling 8 MCP23017. This would mean a whopping 64 x 16 = 1024 I/O pins that could be controlled!
To be able to have 8 extra I2C buses an extra I2C bus multiplexer PCA9548 was needed but luckily this was directly supported already by the Linux kernel at that time (I had looked for this multiplexer years before but the support for it was not yet available in Linux). The nice thing of the Linux driver for the I2C multiplexer is that it's transparent for the user. You select the I2C bus (normally 11 to 18) and Linux will first set the multiplexer in the right position before sending out the effective I2C command to the respective devices.
John was immedately wild about the idea and after some chat sessions between him and me on Sundays he started to work on the iCpiI2C component. Another component next to iClive, iCserver, iCbox, iCpigpio,...
It was back in 2012 when I've picked up immedateC for the first time. I was already a long-time subscriber of the German magazine ELV (Electronic Literatur Verlag). Around that time, ELV introduced a series running on a Linux board, introducing immedateC as the core of it. This can be seen in the ELV issues 05/2011, 06/2011 and 01/2012. At that time, I was looking for a suitable mechanism to set up my home automation system.
Since at that time the Raspberry Pi saw the light of day I switched to that SBC to start my home automation system, based on Pi4J. Since Pi4J had already a framework that supported the I/O expander MCP23017 (including I2C which was heavily borrowed from wiringPi, a famous library dedicated for the Raspberry Pi) I stepped into that adventure.
A few years later (must have been around 2016) my system was already partly up and running, but I wanted to do more things than were possible with Pi4J. I then contacted John for the very first time to ask for some information. Then I came to know his complete GitHub repository around immediateC.
However, at that time his immediateC system didn't support I2C but only SPI. Since all my I/O expanders (and also future devices) run on I2C, this was a no-go for me.
In the meantime, Pi4J did a huge reorganisation in its Pi4J framework which made me very unhappy. They removed all beautiful drivers they had for many, many components (MCP23017 was, as already said, one of them) and also moved over to another Java version and so on. In short, I was not pleased with the fact they dropped useful component drivers.
At the end of 2022 I was looking again to a kind of PLC control for my system but I bumped against the same wall: no I2C support.
Then I remembered John's language and I again contacted him with a very specific question: to be able to control a lot of MCP23017 devices spread over 8 different I2C busses, each bus being capable of controlling 8 MCP23017. This would mean a whopping 64 x 16 = 1024 I/O pins that could be controlled!
To be able to have 8 extra I2C buses an extra I2C bus multiplexer PCA9548 was needed but luckily this was directly supported already by the Linux kernel at that time (I had looked for this multiplexer years before but the support for it was not yet available in Linux). The nice thing of the Linux driver for the I2C multiplexer is that it's transparent for the user. You select the I2C bus (normally 11 to 18) and Linux will first set the multiplexer in the right position before sending out the effective I2C command to the respective devices.
John was immedately wild about the idea and after some chat sessions between him and me on Sundays he started to work on the iCpiI2C component. Another component next to iClive, iCserver, iCbox, iCpigpio,...
on Januari 16th 2023 I contacted John again with the proposal to extend his immediateC with a "network" of many I/O expanders based on the MCP23017, I2C controlled.
Below, you can see the proposal I made to John. It consists of a Raspberry Pi (no matter which one) that controls an I2C multiplexer. The multiplexer proposed is the PCA9548 which can forward the main I2C bus to a maximum of 8 I2C output buses, simultaneously if needed.
On every I2C bus you can then have a maximum of 8 MCP23017 I/O expanders since the devices have 3 address selectors: A0 - A2.
The basic I2C address is 0x20 and can go up to 0x27 on the same I2C bus. So, 8 I/O expanders in total are possible on one I2C bus.
In May 2023, during our weekly Skype chat on Sunday mornings John told me he was going to do a "Europe" tour at the end of August, beginning of September 2023 to visit his daugther (a professor at the University of Koln) and other relatives.
But the main reason for his European tour was a congress he had at the University of Leiden in The Netherlands, together with one of his best friends (who invited John to join him to that congress). The congress was scheduled in the beginning of his European journey.
When we had our chat somewhere in May he proposed to drop by at our home to work together on the project we started. He proposed to go first to Leiden and then his next stop would be our home in Belgium.
Needless to say I was immedately in favour of this proposal: I was going to cooperate with a very intelligent and capable person who had tons and tons of experience in software programming.
My wife Monique and myself immediately started to arrange the necessary things for the visit of John.
On August 23rd, 2023 Monique and me drove with the car to Leiden, to pick up John after he had finished his congress at the university. We had some time left before we would meet John and wandered a bit around in the lovely and cute city of Leiden. Then after some time we met John at the agreed meeting point: the first time I saw John "alive". It was a warm greeting moment.
We arrive home quite late in the evening and John was also exhausted of the passed week at the congress in Leiden so we had a small snack to finish the day (I think it was a small spaghetti Monique prepared quicky) and then we brought John to a nearby B&B, located in a quite place in the forest where we also live.
The following days I picked up John in the morning at the B&B and we went straight to my study room to work on the project. We had a lovely, good and very productive time. We progressed way faster than we did with our weekly meetings, especially since John could work on my setup and we could together add/improve/replace pieces of code.
I remember John was a big fan of "black tea", a tea we didn't have at hand. But Monique immediately went buying the tea for John, which he drank with a lot of joy!
We also had our lovely meals at noon and in the evening, all prepared by Monique. John was very satisfied about the treatment he got and told his homefront that Monique was taking very good care of him and that she was a marvellous cook!
iCmqtt is one of the components John wrote from scratch - in Perl - when he was here. Next to this, we improved the I2C communication (iCpiI2C.c).
John has been here until August 30 (1 week) before he continued his travel through Europe. His next stop was visiting his daughter Monica, living in Koln.
It was a wonderful time and I'm extremely happy I've met John this way. Nothing can beat a face-to-face talk and as said before, we made a lot of progress in those 6-7 days working together. Eternally grateful for this!