Physical Computing Using Go and Arduino


Published on

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

Published in: Devices & Hardware
1 Comment
No Downloads
Total Views
On Slideshare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

Physical Computing Using Go and Arduino

  1. 1. Go and Get Physical with the Cloud Using Arduino with Google App Engine for Go ! Justin Grammens
  2. 2. 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
  3. 3. What We’ll 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 )
  4. 4. Block Diagram App Engine ArduinoBrowser SMS Service
  5. 5. Go Programming Language Developed by Google in 2007 Statically typed language, loosely derived from C. Automatic memory management FAST compilation and execution! Download at:
  6. 6. 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
  7. 7. Go Language Key Points No type inheritance No method overloading Has pointers, but no pointer arithmetic (ie. can’t be changed) No generics (a la List<String> in Java for instance) No Exceptions - instead uses an error return type func Open(name string) (file *File, err error)
  8. 8. 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
  9. 9. Example Workspace bin/ hello # command executable pkg/ darwin_amd64/ mydate.a # package object src/ hello/ .git/ # git repository metadata hello.go # package source mydate/ .git/ # git repository metadata mydate.go # package source
  10. 10. IDEs / Editors with Plugins Emacs Eclipse - ( GoClipse ) IntelliJ IDEA Sublime Text TextMate Vim
  11. 11. Example: hello.go git clone gdev ! package main import "fmt" func main() { fmt.Println("hello world") } !
  12. 12. 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 )
  13. 13. 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
  14. 14. Publish Library git push to public repository: justingrammens/gdev Access with: import “ examples/mydate” Anyone can install to their workspace with: go get examples/mydate
  15. 15. Calling Library package main ! import "fmt" import "" 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 ) }
  16. 16. 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)
  17. 17. App Engine Using Go Platform as a Service (PaSS) Run applications in Google’s infrastructure Frees you up to develop, not system admin Develop and test locally, deploy globally Beware - Go is Experimental!
  18. 18. App Engine Using Go Deployed to [your_app_id] Quotas: Request & Response Size - 32 MB Request Duration - 60 sec Max total files - 10,000 total : 1,000 per directory Max size files - 32 MB
  19. 19. App Engine Using Go Run “goapp” to see commands goapp serve : runs local server goapp deploy : upload to App Engine
  20. 20. App Engine Using Go Run Hello World Example cd appengine-examples goapp server Local service: http://localhost:8080 Local datastore viewer: http://localhost:8000
  21. 21. 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”
  22. 22. 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: --oauth2 update my app Manage at:
  23. 23. Test Web Service Simple REST Client Verify the values are being stored Toggle values for SMS notifications
  24. 24. Arduino Open source microcontroller board Started in Italy in 2005 as a college student project Based on a simplified version of C++ ( Wiring ) Allows for adding additional boards via “shields” WIFI shield is added for our project Many readily available sensors and libraries!
  25. 25. Arduino Wifi Shield
  26. 26. Hardware Parts PIR Motion Sensor - $9.95 Arduino R3 Board - $30.00 Official Arduino WIFI Shield - $70.00
  27. 27. Schematic
  28. 28. 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. }
  29. 29. 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 WifiClient to Post JSON to our web service. Print the status to the serial monitor.
  30. 30. Resources Play with Go Code!!forum/google- appengine-go - Local Arduino user’s group!
  31. 31. Thanks! Questions?
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.