Hi there
Announcing node-red-contrib-waveshare-shield-adda-11010 which provides working nodes for every pin on this Raspberry Pi shield. The shield has a nice 24 bit AD converter with a 1% accurate VRef chip accepting 0 to 5 volts on 8 channels. The shield also has a nice 16 bit DA converter with two output channels and jumper selectable 3.3V or 5V VRef. The AD converter provides 4 additional GPIO generic digital input and output ports, and the shield passes thru 4 RasPi provided GPIO ports. The board also has some on-board IO hardware for free such as a light sensor, a little potentiometer, and two LEDs. Do note this is a "scada-lite" type AD/DA system, so a 23-bit precision AD conversion takes a bit over one second, this is not hardware for sampling hifi microphone audio LOL.
Its a fun little board to interface with the real world and at least the hardware and my software on my desk work perfectly.
Everything is reasonably well documented and predictable. So, for example, silk screen label D3 on the shield shows up in Node-RED as "D3" for input and output work.
I do have some architectural questions. I got everything to work perfectly but I don't know if I did it the "right" way.
How to handle polling a non-interrupt driven input? I set my nodes up as a filter and any input to the node sets the pin to input mode, reads it, and outputs whatever it read. There is no interrupt facility at the hardware level to "know" if expanded GPIO port D2 changed from 1 to 0 or vice versa.
What's an example of a node that handles python the most right way? The architecture of how I set up the nodes was to ... do everything in Python and the javascript is mostly a wrapper. Note that the hardware is very raspberry pi specific so there is little point in supporting 32-bit intel linux when the hardware will never connect to anything but a raspbian running pi. I know my bodge effort works; and it works very well; I'm just curious whats the "right" way to do it?