Hi all,
I'm a fond reader of these forums and I'd like to share with you an open-source/open-hardware project I've built over the past couple of years: "
NoCAN, the wired Arduino-compatible IoT platform for makers".
The
NoCAN platform enables you to connect a set of Arduino-compatible 'nodes' to a Raspberry-Pi, using a single cable that brings both power and networking. The Raspberry Pi controls the network and acts as a gateway to the outside world. The nodes enable you to connect sensors, lights, relays, and actuators to build complex IoT application easily. You can write your code in the Arduino IDE and push it over the network to any node. The network can easily reach 300 meters (1000 feet) in total length.
In terms of hardware, we currently have one "official" node (some users have built their own custom alternative): the CANZERO.
The CANZERO is a small development board in the Arduino MKR format, which features an ARM Cortex M0+ (the Atmel SAMD21G18). In short, it is very much like the Arduino MKR Zero, with the addition of CAN-bus networking, which is itself supported by an STM32F0. The "dual" MCU approach was created for additional robustness for remote software updates: the STM32F0 can "reset" the SAMD21G18 in bootloader mode even if the later is somehow "stuck".
The raspberry-pi needs to be fitted with a HAT: the PiMaster. The PiMaster just acts as a CAN-bus to SPI gateway for the Raspberry Pi and contains some safety features such as current limiting and short circuit protection. The HAT is built around an STM32F0.
NoCAN is based on CAN-bus, but with the software tools provided, you can interface with many other platforms:
- MQTT: you can send and receive data from any MQTT broker, including external cloud services such as adafruit.io or Cayenne.
- Blynk: you can control your network with your smartphone (blynk.cc).
- Web: you can control your network with a web interface.
- CLI: There is a command line utility to allow scripting (e.g. for bash scripts).
We also have a JSON RESTful interface, but it needs further documentation and we are planning to add C/C++ and Python language bindings pretty soon.
You can learn more about this project here:
https://www.omzlo.com/articles/the-nocan-platformI'd like to take this opportunity to answer in advance 3 questions I get all the time.
1) Why aren't you using WiFi, Bluetooth BLE, Lora, Zigbee, etc. 
Yes, there are wireless gizmos that run a year on a coin cell. Yes, an ESP8266 is amazingly cheap. Wireless is great. Nevertheless, it is not always the right solution for an IoT project, because of battery, signal or reliability issues. Many of our users are building applications that do not fit in the "wireless" paradigm.
2) Why "Arduino-compatible"? I'm a "real" engineer, Arduino-stuff is for kids! 
I think Arduino is a wonderful thing, but we don't have to agree ;-)
NoCAN works fine without Arduino. You can use our libraries and tools to program your nodes "baremetal" if you prefer. We do it all then time.
3) Why is it called "NoCAN" if it uses CAN-bus?
It was a bit of humor, parodying what NoSQL is to SQL. Sorry.
But in fact, with features such as automatic address allocation and publish/subscribe, we believe that NoCAN takes CAN-bus where it has never been! So perhaps the name is appropriate :-)
Today, NoCAN is being used in all kinds of applications, including environmental monitoring, security systems and cloud apps (with Amazon Greengrass).
There is still plenty of things to do and plenty of work ahead, and we really appreciate the feedback we get from the community.
Cheers,
Alain -- Omzlo.com