Git Product home page Git Product logo

reach-wg's Introduction

Reach Working Group

Code of Conduct

We're designing Tessel Reach: a remote I/O board for connecting to sensors.

The point of Tessel Reach is to enable low-power internet-connected devices to be programmed in high-level languages - an extension of Tessel into the low-power realm, and a sensible/accessible way to connect many distributed sensor nodes to form a sensor ecosystem.

Tessel and Reach form star network whose origin is Tessel and points are Reach modules. The Tessel 2 is the entry point for the programmer.

Reach modules are low-power sensor nodes placed around a room or environment.

How to get involved:

What we're working on (and how you can help!)

Reach is a work in progress. To ship Reach, there are three projects to work on:

Interaction

Current Draft: How do you interact with Reach?

How do you interface with a network of sensors? How do you perform autodiscovery? And when talking to a sensor, what is the API like to control its I/O interfaces? We're investigating these questions by designing an API proposal that we can easily prototype and test in a few common scenarios.

Firmware

Read this to get started with Reach's firmware.

We want to build a realtime firmware that can handle asynchronous radio communication, enter and wake from low power sleep modes, can handle a novel protocol design communicating with T2, and which exposes the full range of I/O. We are currently prototyping with the ESP32 architecture: we recommend using the Sparkfun ESP32 Thing with a corresponding tutorial. (You can also choose another dev kit like the DevKitC from Adafruit, with some adjustments to your setup.)

Hardware

Our goal is to design an ESP32 board that allows us to rapidly test out our product requirements, get out prototype hardware to contributors, and test out real world workloads like speed, power consumption, and radio range. See hardware-esp32/ for a work in progress schematic and BOM.

License

Software licensed under MIT or Apache 2.0, at your option.

Hardware designs licensed under CC-BY-SA.

reach-wg's People

Contributors

evansimpson avatar frijol avatar jiahuang avatar nodebotanist avatar tcr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

reach-wg's Issues

Collect case studies (and harvest the archives folder)

We should have a corpus of case studies in the case-studies/ folder which we can target Reach's design toward and help derive product requirements.

The easiest task would be to break out relevant case studies from the archives/ folder, which has a lot of old content for Reach.

Additionally, feel free to contribute your own idea you think Reach could help with!

Create an ESP32 demo talking I2C to an accelerometer.

We want the ESP32 demo at firmware-esp32/ to be capable of reading data from an accel-mma84 module over I2C. The MVP would be reading acceleration data and turning on lights when e.g. the board is flipped over. We will later abstract this working accelerometer demo to build our firmware support for I2C.

Design an API that allows for star network topology over BLE or Wifi.

We should produce a preliminary API that shows how to connect to Reach devices.

See the rendered view.

For example, given the above interaction spec, a user could do:

var Reach = new Reach([dev-id])
Reach.module.i2c.transfer(new Buffer([0xDD, 0xAA]))
.then((res) => {
  // received bytes
})

TODO:

  • How do you detect Reach nodes?
  • Can you address the hardware interface directly, or should it be hidden behind an explicit "we will control each transfer" interface?
  • Can node modules support a Reach interface the same way as a Tessel interface?
  • What is the goal of a command line tool?

Reach Spec

We want to design a products specification for Reach that defines its requirements, marketing strategy, and hardware and design tradeoffs.

See the rendered view.

TODO:

  • Define hardware tradeoffs.
  • ???

Complete V1 schematic, layout, and design review

We have a preliminary schematic in hardware-esp32/ right now for an ESP32 based board. The next steps are:

  • Review this schematic & update the BOM
  • Produce a board layout that exposes all the features the WG will need in development
  • Hold a design review
  • Manufacture the board
  • Assemble the board in house
  • Perform a test sequence on the board to ensure it works

Review RTOS options for running ESP32 radios

This probably falls into the category of "use what's in the dev kit", but: We should determine what OS the ESP32 needs to run in order to meet Reach's criteria.

In the past (see the SAMD21 running on T2) we've used a self-written firmware that runs directly on the metal to power our hardware applications. We also (in the T1) have integrated with Wifi radio event loops in a bare metal environment. FreeRTOS, which the esp-idf ships with, is higher level than what we've worked with before, and represents a set of trade-offs we should be explicit about. If the alternative is to run a bare-metal firmware, or an alternative RTOS like NuttX, etc. we want to pick the best tool for the job.

TODO:

  • Determine if the ESP32 requires the FreeRTOS stack to power its radio stack
  • See if bare-metal code examples running on the ESP32 exist
  • Create a tradeoffs list for each of our options and select a path forward for A) prototyping and B) production (these may be different)

Write a guide to loading our `firmware-esp32/` code onto an ESP32 Thing.

This should be straightforward; we have code infirmware-esp32/ and we want an instructions file at firmware-esp32/README.md which describes how to load code onto the device.

This may increase in complexity over time, but for now can mostly replicate the instructions at https://github.com/espressif/esp-idf-template, e.g:

## Getting started

* Plug in your ESP32 Thing.
* Run the makefile.
* Load it onto the device.
* Expect $THIS_THING to happen.

### Troubleshooting

Possible errors with drivers? etc. Follow these instructions: $INSTRUCTIONS_URL

Add a "hello world" to `firmware-esp32/`

We should have an example "hello world" that can be built directly from this repo. This will allow us to put together a "Getting Started" guide that allows anyone to jump in easily.

Eventually we'd like to evolve this into our Reach firmware.

Identify power consumption for ESP32 BLE & Wifi

We need some hard numbers about sporadic BLE and Wifi usage on ESP32, as well as Wifi usage on the ESP8266. Numbers available in the datasheet are a good baseline, but we probably want solid numbers to inform whether these architectures are viable for long-lived sensor networks.

Ideally, we can contrast these with other BLE frameworks as well and make informed choices about the Reach architecture.

Trouble pushing Hello World code to ESP32

Hey, I am trying to use ESP32 and checking out its basic functionality. The tutorial I have referred to is - http://esp-idf.readthedocs.io/en/latest/get-started/ and the driver that I installed for my Mac OSX is - https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers

The toolchain has been setup. However pushing the code into the board is not done. I've attached a screenshot below, against the tutorial code. Any help would be of use :)

screen shot 2017-08-09 at 12 19 46 am

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.