Physical Computing Using Go and Arduino

  • Published on
    17-Aug-2014

  • View
    638

  • Download
    12

DESCRIPTION

Using the Google's Go Programming language on App Engine to capture realtime sensor data from an Arduino over the internet.

Transcript

  • Go and Get Physical with the Cloud Using Arduino with Google App Engine for Go ! Justin Grammens justin@arduino.mn
  • I Want to Build Something! Goal : Track movement using a motion sensor Technology Requirements: Use Go Use Google App Engine Use Arduino Send text message when movement occurs
  • What Well Cover Go Programming Language Deployment on Google App Engine ( using Go ) REST interface on App Engine ( using go-restful ) Reading sensor data on Arduino Sending data to our application on App Engine Send message to 3rd party SMS provider ( Twillio )
  • Block Diagram App Engine ArduinoBrowser SMS Service
  • Go Programming Language Developed by Google in 2007 Statically typed language, loosely derived from C. Automatic memory management FAST compilation and execution! Download at: https://code.google.com/p/go/
  • Go Language Key Points Some dynamic typing ( x:= 0 instead of int x = 0 ) Remote package management ( go get ) Built in mechanisms for concurrency Able to produce statically linked native binaries Strong focus on support for concurrency
  • Go Language Key Points No type inheritance No method overloading Has pointers, but no pointer arithmetic (ie. cant be changed) No generics (a la List in Java for instance) No Exceptions - instead uses an error return type func Open(name string) (le *File, err error)
  • Workspaces Designed from the ground up to work with code in public repositories $GOPATH variable points to your workspace location Put your code in a unique path convention is: $GOPATH/src/github/user/project
  • Example Workspace bin/ hello # command executable pkg/ darwin_amd64/github.com/justingrammens mydate.a # package object src/ github.com/justingrammens/ hello/ .git/ # git repository metadata hello.go # package source mydate/ .git/ # git repository metadata mydate.go # package source
  • IDEs / Editors with Plugins Emacs Eclipse - ( GoClipse ) IntelliJ IDEA Sublime Text TextMate Vim
  • Example: hello.go git clone https://github.com/justingrammens/ gdev ! package main import "fmt" func main() { fmt.Println("hello world") } !
  • Example: hello-world.go usage: type go on command line $: go run hello.go hello world ! $: go install $: $GOPATH/bin/hello ! $ go build ./hello ( note the size of the executable )
  • Writing a Library package mydate ! import "time" ! func Birthdate() time.Time { d := time.Date(2014, time.May, 6, 0, 0, 0, 0, time.UTC) return d } Return type Capital letter means public access Calling function
  • Publish Library git push to public repository: https://github.com/ justingrammens/gdev Access with: import github.com/justingrammens/gdev/go- examples/mydate Anyone can install to their workspace with: go get github.com/justingrammens/gdev/go- examples/mydate
  • Calling Library package main ! import "fmt" import "github.com/justingrammens/gdev/mydate" import "time" ! func main() { now := time.Now() birthday := mydate.Birthdate() diff := birthday.YearDay() - now.YearDay() fmt.Printf("There are only %d days to my birthday!n", diff ) }
  • Example: Functions can return multiple values: func AddandSub(x, y int) (sum, difference int) { sum = x + y difference = x - y return } Called with: sum, difference := mydate.AddandSub(10, 11)
  • App Engine Using Go Platform as a Service (PaSS) Run applications in Googles infrastructure Frees you up to develop, not system admin Develop and test locally, deploy globally Beware - Go is Experimental! https://developers.google.com/appengine/downloads
  • App Engine Using Go Deployed to [your_app_id].appspot.com Quotas: Request & Response Size - 32 MB Request Duration - 60 sec Max total les - 10,000 total : 1,000 per directory Max size les - 32 MB
  • App Engine Using Go Run goapp to see commands goapp serve : runs local server goapp deploy : upload to App Engine
  • App Engine Using Go Run Hello World Example cd appengine-examples goapp server Local service: http://localhost:8080 Local datastore viewer: http://localhost:8000
  • App Engine Using Go No standard REST framework out of the box Use go-restful project Easy install and setup with go get command Resources: Events Sms
  • App Engine Using Go Run DevFest App cd devfest goapp server Access swagger for API at http://localhost:8080/apidocs Push update to google app engine at: appcfg.py --oauth2 update my app Manage at: https://appengine.google.com
  • Test Web Service Simple REST Client Verify the values are being stored Toggle values for SMS notications
  • Arduino Open source microcontroller board Started in Italy in 2005 as a college student project Based on a simplied version of C++ ( Wiring ) Allows for adding additional boards via shields WIFI shield is added for our project Many readily available sensors and libraries!
  • Arduino Wi Shield
  • Hardware Parts PIR Motion Sensor - $9.95 Arduino R3 Board - $30.00 Ofcial Arduino WIFI Shield - $70.00
  • Schematic
  • Arduino Basics Only 2 functions are required ! void setup() { // put your setup code here, to run once. } ! void loop() { // put your main code here, to run repeatedly. }
  • Motion Sample Code Motion activated by: Takes an infrared snapshot of the room If anything changes, pin #2 goes LOW Use the digitalRead of values Use WiClient to Post JSON to our web service. Print the status to the serial monitor.
  • Resources Play with Go Code! http://tour.golang.org/ https://groups.google.com/forum/m/#!forum/google- appengine-go https://developers.google.com/appengine/docs/go/ http://arduino.mn - Local Arduino users group!
  • Thanks! Questions?

Recommended

View more >