Home - dtex/NodebotUI GitHub Wiki
NodebotUI is a client/server framework that facilitates rapid prototyping of browser controlled robotic systems. It is intended for:
- Experienced nodeboticists - Anyone who just wants to demo/test something simply and quickly without writing a bunch of code.
- Fledgling nodeboticists - People anxious to dive right in and making things move and blink without learning the ins and outs of Johnny-Five or node.js
- Young evil geniuses. Mom or dad might need to start the server, but even a kiddo should be able to wire up servos and lights and make them dance. It's that easy
####Check out the getting started page or dive right into the detailed documentation.
##A Brief Overview
NodebotUI can be divided into two major components:
- NodebotUI Server - An NPM module that can be used in combination with http, Express or another application framework to provide a gateway between a web page and Johnny-Five. We include an example of a very basic server that can be used right away without any extra server side code
- NodebotUI Client - A client side script (served up by the NodebotUI Server) that takes care of parsing your HTML, instantiating boards and devices on the server, binding events to the DOM, manipulating the DOM where necessary, etc. It's nifty, and all you have to do is include it in a script tag
Glossary
- Dashboard - The HTML file that defines the interface(s)
- Theme - An optional CSS (and possibly JS) file for styling the dashboard
- Browser Control - An input/output device in the Dashboard HTML. This can be a single checkbox, slider, accelerometer, etc. or a group of multiple inputs under a fieldset.
- Browser Output - An output only device in the Dashboard HTML. A meter or on/off indicator is a good example of this
Dependencies
- johnny-five - Handles all communication between node.js and your Arduino
- socket.io - Handles (nearly) all communication between the browser and node.js
- underscore.js
- send
Feature Requests
Things could get confusing since we will have virtual devices that share a name with physical devices. Also, there are devices that function as both input and output. For example, we can have a "toggle" as an input or output device in the browser, or as an input device in the physical world.
To avoid confusion here is our taxonomy: Within the browser we have "Browser Controls" (input devices) and "Browse Outputs". Browser Controls like switches and sliders bind to output devices on the Arduino like servos and LED's. Browser Outputs like meters bind to input devices on the Arduino like switches and sensors.
For the description, the following fields will be helpful:
- Description: A simple description of what the feature is. They won't all be obvious.
- Sample: A sample of the element in HTML
- Required Attributes: data-device-type and data-pin will probably be required on all elements
- Optional Attributes: data-min and data-max for example
- Sample Uses: Some common use cases
Contributions
All contributions must adhere to the Idiomatic.js Style Guide.
Taxonomy and Structure
All object and method naming conventions should reflect those set forth in johnny-five and the project folder structure should reflect as closely as practicable that used in johnny-five.
Since we are building a tool to support johnny-five, we should borrow as heavily as we can from the styles and conventions therein so users have less to learn.