The final wrap of this process.

Softata is a set of software products enabling devices to running on a RPi Pico W to be orchestrated by a .NET app. The specific context is for the Pico to running in a a Grove RPi Pico Shield with using off-the-shelf Grove devices with its simple connectivity. Other non-grove devices can be used with a simple addition to a Grove 4-wire cable.

Softata is a 3 part software suite. Firstly, there is the Arduino sketch that runs on a RPi Pico W receiving commands via a TCPIP service from a remote app. It interprets those commands and runs them returning a result. The result is string that normally starts with “OK:” as an acknowledgement that the command worked. If, for example with a sensor, a value is to be read and returned, that is appended to the returned string.

The second part is the C# SoftaLib library which sends the commands and receives the results. The commands are initiated by a host .NET app, that makes structured calls to the library. A .NET Console app and a Blazor app are provided as examples. These run a set of tests. Some tests target one device such as the Neopixel test that demonstrates various display functions. Other tests are combination iof devices such as the Potentiometer-LED brightness test.

Various sensors, actuators and displays have been implemented making use of existing devices in the Arduino device library or available as downloadable zip files. The set of devices can be added to as demonstrated here with the Bargraph display.

Whilst it would be desirable to be able to add a new device simply by including just one file, for example the device class, (at least one in the sketch and one in SoftatatLib) specifying it, the current structure of Softata requires a few specific entries in a number of places.

There is also an ability to connect to an Azure IoT Hub and periodically send telemetry. This runs, once started, autonomously in in the Pico second core and can be paused, continued and stopped. The telemetry can also be streamed over Bluetooth to a recipient.

The inbuilt LED is used to indicate the state of the Pico. Once booted it flashes slowly. Once a connection is made by a host, it flashes 4x quicker. When sending telemetry, it also performs a double flash to indicate this.

Current List of supported devices

  • Sensors
    • DHT11
    • BME280
    • UltrasonicRanger
  • Actuators
    • Servo
  • Displays
    • OLED096
    • LCD1602
  • Serial
    • Loopback tests (Serial1 and Serial2)
    • Grove GPS Sensor


Some devices use GPIO and are reconfigurable in terms of the pins used, whereas the I2C devices all use I2C0. The I2C devices could be “daisy changed” together to the one I2C shield socket, assuming they have different I2C addresses.

Custom Sensors and Actuators

This sequence of blog posts provides a template for adding new displays to Softata. Much use is made of polymorphism such that once a few specific are specified for a new display, the rest of an implementation is reasonable mechanical. Sensor and actuators could be similarly added. They don’t require the Misc commands though.


  • Add more devices
  • Create a script language for creating a system composed of supported devices.
  • With Azure IoT Hub, implement Cloud to Device messages etc.

 This Category Links 
Category:Softata Index:Softata
  Next: > Softata
<  Prev:   Softata - Adding a new display