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 Engi...
What We’ll Cover
Go Programming Language
Deployment on Google App Engine ( using Go )
REST interface on App Engine ( using...
Block Diagram
App
Engine
ArduinoBrowser
SMS
Service
Go Programming Language
Developed by Google in 2007
Statically typed language, loosely derived from C.
Automatic memory ma...
Go Language Key Points
Some dynamic typing ( “x:= 0” instead of “int x = 0” )
Remote package management ( “go get” )
Built...
Go Language Key Points
No type inheritance
No method overloading
Has pointers, but no pointer arithmetic (ie. can’t be
cha...
Workspaces
Designed from the ground up to work with code in
public repositories
$GOPATH variable points to your workspace ...
Example Workspace
bin/
hello # command executable
pkg/
darwin_amd64/github.com/justingrammens
mydate.a # package object
sr...
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(...
Example: hello-world.go
usage: type “go” on command line
$: go run hello.go
hello world
!
$: go install
$: $GOPATH/bin/hel...
Writing a Library
package mydate
!
import "time"
!
func Birthdate() time.Time {
d := time.Date(2014, time.May, 6, 0, 0, 0,...
Publish Library
git push to public repository: https://github.com/
justingrammens/gdev
Access with:
import “github.com/jus...
Calling Library
package main
!
import "fmt"
import "github.com/justingrammens/gdev/mydate"
import "time"
!
func main() {
	...
Example:
Functions can return multiple values:
	 func AddandSub(x, y int) (sum, difference int) {
	 	 sum = x + y
	 	 diff...
App Engine Using Go
Platform as a Service (PaSS)
Run applications in Google’s infrastructure
Frees you up to develop, not ...
App Engine Using Go
Deployed to [your_app_id].appspot.com
Quotas:
Request & Response Size - 32 MB
Request Duration - 60 se...
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 ...
App Engine Using Go
No standard REST framework out of the box
Use “go-restful” project
Easy install and setup with “go get...
App Engine Using Go
Run DevFest App
cd devfest
goapp server
Access swagger for API at http://localhost:8080/apidocs
Push u...
Test Web Service
Simple REST Client
Verify the values are being stored
Toggle values for SMS notifications
Arduino
Open source microcontroller board
Started in Italy in 2005 as a college student project
Based on a simplified versi...
Arduino Wifi Shield
Hardware Parts
PIR Motion Sensor -
$9.95
Arduino R3 Board -
$30.00
Official 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() {
...
Motion Sample Code
Motion activated by:
Takes an infrared “snapshot” of the room
If anything changes, pin #2 goes LOW
Use ...
Resources
Play with Go Code! http://tour.golang.org/
https://groups.google.com/forum/m/#!forum/google-
appengine-go
https:...
Thanks!
Questions?
Upcoming SlideShare
Loading in …5
×

Physical Computing Using Go and Arduino

3,395 views

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
6 Likes
Statistics
Notes
No Downloads
Views
Total views
3,395
On SlideShare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
38
Comments
1
Likes
6
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 justin@arduino.mn
  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: https://code.google.com/p/go/
  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/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
  10. 10. IDEs / Editors with Plugins Emacs Eclipse - ( GoClipse ) IntelliJ IDEA Sublime Text TextMate Vim
  11. 11. Example: hello.go git clone https://github.com/justingrammens/ 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: 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
  15. 15. 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 ) }
  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! https://developers.google.com/appengine/downloads
  18. 18. App Engine Using Go Deployed to [your_app_id].appspot.com 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: appcfg.py --oauth2 update my app Manage at: https://appengine.google.com
  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! 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 user’s group!
  31. 31. Thanks! Questions?

×