Detailed Intro - nodesign/weio GitHub Wiki

WeIO in Details

WeIO board is based on Atheros AR9331 MIPS module with slightly modified OpenWrt. with some patches that soon be pushed to OpenWrt master https://github.com/nodesign/openwrt/commits/weio.

The main choice was made because of the high availability of this module at very low cost, in the unit quantities and with very good SW support.

Application relays on Linux to provide networking support, multiprocessing and several device drivers - most notably USB (but I2C and GPIO control also). For RT performance and GPIO expansion we had to connect an additional Cortex-M0 co-processor via USB TTY, which acts as a simple RPC server. FW can be found here https://github.com/8devices/UPER This helps heavy lifting for PWM and similar, where bitb-anging of Atheros GPIOs would not be a performer (even when backed with Xenomai patches).

Although user has an access to all Linux facilities, WeIO solution is specially adapted to designers and makers, so we spent a lot of time on building Python web application based around Tornado server https://github.com/nodesign/weio. This application is basically a WeIO IDE, and all the development tools are embedded and present on the board. This way user does not have to install anything on the host (all is interpreted anyway, so there are no cross-compilers). Board acts as the development web server and no access to cloud-based service is necessary.

The use case in mind is following: user plugs the board, Linux boots and sets up WiFi either in STA (home WLAN for example) or AP mode. User points the browser to the weio.local and finds the IDE. Programming can be done either in pure Python for standalone applications or via JS for user-agent based applications (where JS function calls are delegated to Python back-end). Tornado server spawns user defined process in a thread and executes it, while serving user defined HTML at the same time (thus providing UI to the code that interacts with electronics). Application supports multiprocessing, so several user-defined programs can be executed at the same time, and information can be shared between them (magic of Python multiprocessing module ;)). WiFi configuraion is made simple, and we added SW updater to replace FW or add new features on one click.

Why all of this effort? Well - IoT becomes a buzz word and many companies are building cloud-based services, hoping that user-end devices will run firmware capable to do their API calls (be it RESTful, CoAP or whatever), but not much of them seems to care about who will make these end devices, which basically are the real useful things that designers and makers (and users) are interested in. They are usually suggesting using Arduinos, RPis or similar popular boards for end nodes. So people start buying Arduinos and RPis and immediately start facing several problems, one of biggest being WiFi connectivity - which does not come off the shelf with these boards. So they start buying an additional WiFi modules, shields and USB keys (rising the final product price), and configuring these - which is not a trivial task even on Arduino. So when this is done, and everything is connected, designers want to add some user interfaces and then they are stuck with Processing (for Arduino), or some more complex coding for RPi, etc… In the end, when all is done, and designers want to mass-produce their products they figure out that WiFi module is just too expensive (Arduino case, modules with 802.11 stack integrated), or not at all available on the market for small quantities (RPi case, Linux WiFi modules that come in USB dongles).

So, we saw that not only programming effort was too big for fast electronic prototyping of connected objects, but also HW design was practically impossible for DIY or low-cost production (less than $50). WeIO makes electronic prototyping easy as making websites, because user can write only JS code embedded in the HTML user interface. In the worst case of complexity, it becomes as hard as writing several Python scripts. There is zero installation on user's PC, as IDE is contained on the WeIO board, and all the tools are there. UI can be accessed from any device as content is HTML based. Finally, end product can be assembled easily as we carefully chosen only low cost components that are available on the market even in single unit quantities. This way you can push your design to the mass market with very little effort.

In the end, WeIO adds a bit of design and arty touch in the whole development process, as it comes from Paris and with nodesign.net, known French design agency, backing it up.