Suite of libraries for IoT devices (written in Go), experimental for x/exp/io

Go libraries/drivers for IoT devices

GoDoc Build Status

This repo contains a suite of libraries for IoT devices/sensors/actuators. The suite is meant to be as dependency free and as idiomatic as possible.

If you are interested in helping, feel free to look at the open issues mentioning help needed. If you have questions on how you implement some of the features, don't hesitate to ask. If you are trying to integrate these libraries in your projects and have questions, please open an issue.

Note that there are a LOT of IoT devices and while we would love to have libs for all of them, we will need your help.

Supported devices

Grove

Adafruit

Pimoroni

Generic

The following libraries can be used on multiple devices that use the same underlying component. Often various manufacturers create their own version of a device using the same component. If you have device that doesn't have a driver listed above, look at the main component used and see it it matches one of the ones mentioned below.

Repo organization

Device libraries are organized by manufacturers and should use names that easy to google or identify. Each device package contains a README file with references and details about the device (and usually a picture and links to datasheets). You will also find an examples folder with basic examples on how to use the library.

Test setup

Testing IoT devices is quite complicated, most of us use a Raspberry Pi, connect the devices directly or via shield and run the examples to test. Yes, it's far from perfect :(

More information / Advanced topics

Checkout the wiki for more info.

Comments
  • reorganize the device packages by manufacturers

    reorganize the device packages by manufacturers

    As we are adding more devices, it's getting hard to find them. For instance I organized the seedstudio devices under grove which was probably a mistake.

    My suggestion is to use the manufacturer name such as seeedstudio, adafruit, pimorini etc..

    Thoughts?

  • Travis-CI: make sure we always use the latest version of exp/io

    Travis-CI: make sure we always use the latest version of exp/io

    @rakyll I believe that if we don't setup travis to update the exp/io packages, we won't get the latest versions and therefore won't notice when upstream changes break our device builds. I might be wrong tho.

  • dotstar: nothing works

    dotstar: nothing works

    The examples are not working. We are not setting the bits per word, SPI mode or the max speed. I don't know what else is missing but was not able to light up my dotstar strip.

  • Fix misleading message

    Fix misleading message

    README mentions the following:

    These libraries rely on Go's new exp/io interfaces and are designed so they can be used as is or via existing Go IoT libraries/frameworks such as GoBot, Embed and hwio.

    Even though this is practically possible, this is not the goal of exp/io packages. Trying to achieve it by writing drivers that work against Gobot, Embed, etc also will create confusing and more layers of unnecessary implementation. The more optimal strategy is to rewrite, eg. rewriting Gobot's SPI adaptor layer as an spi.driver and contribute it to golang.org/x/exp/spi.

    /cc @mattetti

  • Grove LCD RGB Backlight device support

    Grove LCD RGB Backlight device support

    This is a pretty complete implementation of the Grove LCD device, some of the code could be cleaned up, and the allocation could be reduced. That said I think it's good to merge as is.

    Something interesting to notice is that we have to pass 2 devices (one for each address) when this is really a device concern and not a user's.

    /cc @rakyll

  • simplify example

    simplify example

    As per our discussion, I simplified the example I previously wrote that was using signal handling. I did start a new wiki entry explaining how to use signals.

  • s/New/Open/ as the entry point into devices

    s/New/Open/ as the entry point into devices

    As discussed in the accel3xdigital device PR, it is semantically more correct to use Open vs New and it is also a more symmetrical API since one needs to Close after being done with the device.

  • Rename repo to devices?

    Rename repo to devices?

    "drivers" is a terminology preserved for the protocol drivers. To help with the ambiguity, should we rename the repo to "devices"?

    /cc @mattetti

  • grove/accel3xdigital: remove signal handling from example

    grove/accel3xdigital: remove signal handling from example

    https://github.com/goiot/devices/blob/master/grove/accel3xdigital/examples/monitor/main.go contains an infinite loop and uses signal handling to properly clean things up. While the example is valid to show how to handle a clean shut down, the purpose of the example should be to highlight the usage of the library.

    It's therefore better to switch to a for loop that exists after X readings. Cleaning should be done in a defer statement.

  • Add bme280 sensor

    Add bme280 sensor

    Working on a side project to monitor environment data using this particular sensor and I have put together some golang code to interrogate it over i2c.

    Not sure if your interested in external contributions at this stage, but may be handy for others.

  • Gophercon hacking!

    Gophercon hacking!

    I'm hoping on hacking on:

    • finishing the OLED 96x96 implementation
    • analog sensor now that the exp/io GPIO package should be stable
    • planning of a generic solution for the GrovePi
    • Maybe an oscilloscope if someone is interested in pairing with me on that

    Anyone going to the conf and interested in some GoIoT hacking? /cc @rakyll @zankich @deadprogram

  • grove/accel3xdigital support for interrupts

    grove/accel3xdigital support for interrupts

    The sensor can trigger interrupts based on analyzed events. The type of events and the pin used to trigger these events can be defined as explained in the datasheet: http://www.farnell.com/datasheets/1670762.pdf

    Unfortunately, the current state of exp/io/gpio doesn't allow us to add this feature. That said, we expect the gpio pkg to be soon ready. If you are interested in this issue, look at the gpio pkg, if he does support interrupt pins, then you can work on it.

  • grove/oled96x96: add support for bitmap drawing

    grove/oled96x96: add support for bitmap drawing

    func (o *OLED96x96) DrawBitmap(bitmap []byte) error { return nil } is not yet implemented. We might also want to add a DrawImg method that takes an image.Image argument

A opinionated multi-tenant hyperscale Internet of Things platform to connect IoT devices fast and securely with minimal TCO

infinimesh IoT Platform infinimesh is a opinionated multi-tenant hyperscale Internet of Things platform to connect IoT devices fast and securely with

Feb 14, 2022
🐼 IoT worm written in pure golang.
🐼 IoT worm written in pure golang.

GoriaNet Most powerfull cross compiler (27arch). Kill process by port and check for duplicate instance. Killing process by port. Cross compiler. Infor

Oct 17, 2022
An Open-Source Platform for Quantified Self & IoT
An Open-Source Platform for Quantified Self & IoT

Heedy Note: Heedy is currently in alpha. You can try it out by downloading it from the releases page, but there is no guarantee that future versions w

Jan 1, 2023
Make IoT a lot more fun with data.

Eywa What is Eywa? "Eywa is the guiding force and deity of Pandora and the Na'vi. All living things on Pandora connect to Eywa." -- Avatar Wiki Projec

Nov 28, 2022
Golang framework for robotics, drones, and the Internet of Things (IoT)
Golang framework for robotics, drones, and the Internet of Things (IoT)

Gobot (https://gobot.io/) is a framework using the Go programming language (https://golang.org/) for robotics, physical computing, and the Internet of

Dec 29, 2022
A Go client for Google IoT Core

IoT A simple framework for implementing a Google IoT device. This package makes use of the context package to handle request cancelation, timeouts, an

Sep 26, 2022
Industrial IoT Messaging and Device Management Platform
Industrial IoT Messaging and Device Management Platform

Mainflux Mainflux is modern, scalable, secure, open-source, and patent-free IoT cloud platform written in Go. It accepts user and thing (sensor, actua

Dec 31, 2022
Gobot - Golang framework for robotics, drones, and the Internet of Things (IoT)
Gobot - Golang framework for robotics, drones, and the Internet of Things (IoT)

Gobot (https://gobot.io/) is a framework using the Go programming language (https://golang.org/) for robotics, physical computing, and the Internet of Things.

Jan 8, 2023
An embeddable lightweight Go/Golang MQTT broker(server) for IoT.
An embeddable lightweight Go/Golang MQTT broker(server) for IoT.

Snple MQTT 简体中文 Note: The API of this library is still unstable and has not been sufficiently tested, please do not use it in production environments.

Sep 12, 2022
Next-generation IoT open source platform.
Next-generation IoT open source platform.

tKeel Next-generation IoT open source platform High performance, High security and easy to use tKeel is a strong and reusable IoT platform that helps

Dec 28, 2022
Whichip: discover (IoT) device's IP in local network
Whichip: discover (IoT) device's IP in local network

whichip: discover (IoT) device's IP in local network Install On (IoT) Device wget -O install.sh

Dec 8, 2021
Exploring and comparing different IOT messaging protocols / transports.

IOT Messaging Protocols Blynk https://blynk.io/ A fully integrated suite of IoT software Device provisioning Sensor data visualization Remote control

Jan 2, 2022
IoT platform with things/user management and visualization, in Go with Docker using microservices

BARIOT IoT platform to Manage Users and their Things and visualize their data. Microservices services architecture build with Go and docker (compose).

Jun 22, 2022
Securely access remote devices and servers
Securely access remote devices and servers

Deviceplane is an open source device management tool for embedded systems and edge computing. It solves various infrastructure problems related to rem

Dec 15, 2022
Automatically updates the firmware of all your Shelly devices at once.

shelly-bulk-update Automatically updates the firmware of all your Shelly devices at once. Installation Download the binary for your platform: macOS cu

Nov 2, 2022
Hermes is a tiny MQTT compatible broker written in Go.

Hermes Hermes is a tiny MQTT compatible broker written in Go. The goals of the project are as below Easy to compile, and run Tiny footprint Extensible

Sep 9, 2022
siusiu (suite-suite harmonics) a suite used to manage the suite, designed to free penetration testing engineers from learning and using various security tools, reducing the time and effort spent by penetration testing engineers on installing tools, remembering how to use tools.
siusiu (suite-suite harmonics) a suite used to manage the suite, designed to free penetration testing engineers from learning and using various security tools, reducing the time and effort spent by penetration testing engineers on installing tools, remembering how to use tools.

siusiu (suite-suite harmonics) a suite used to manage the suite, designed to free penetration testing engineers from learning and using various security tools, reducing the time and effort spent by penetration testing engineers on installing tools, remembering how to use tools.

Dec 12, 2022
IoT Manager: use IoT platforms with Mender

Mender: Azure IoT Manager: use Azure IoT with Mender General Mender is an open source over-the-air (OTA) software updater for embedded Linux devices.

Jan 10, 2022
Fast specialized time-series database for IoT, real-time internet connected devices and AI analytics.
Fast specialized time-series database for IoT, real-time internet connected devices and AI analytics.

unitdb Unitdb is blazing fast specialized time-series database for microservices, IoT, and realtime internet connected devices. As Unitdb satisfy the

Jan 1, 2023
A opinionated multi-tenant hyperscale Internet of Things platform to connect IoT devices fast and securely with minimal TCO

infinimesh IoT Platform infinimesh is a opinionated multi-tenant hyperscale Internet of Things platform to connect IoT devices fast and securely with

Feb 14, 2022