internet of things with php

Post on 22-Jan-2017

478 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

PHP IOT 4REALZA PRIMER FOR PERFORMING GPIO WITH PHP

HISTORICAL PERSPECTIVEHOW I CAME UP WITH THE HAIR-BRAINED IDEA TO USE PHP FOR IOT

NODEBOTS DAYPut on by Suz Hinton and Pawel Szymczykowski

THE LEXICUTIONERDesigned a built using SumoBot Jr. (Pawelbot) by Adam Englander and Lexi Glazer

PHYSICAL ACCESS SYSTEMComprised of Raspberry Pi B, power converter, electronic door latch, inline switch. Software is Raspbian with Python 2.7 and Twisted.

PHP IOT STARTER KITRASPBERRY PI FOR THE WIN

STARTER KIT HARDWARE

• Raspberry Pi

• Micro USB with AC converter for power

• Cat 5 network cable

• USB Keyboard

• HDMI cable

• HDMI capable display – not shown

• 3.3V LED with (2) female to female connectors

STARTER KIT SOFTWARE

• Raspbian• Pre-installed on SD card

• Download installer (requires SD card reader): https://www.raspberrypi.org/downloads/

• PHP CLI• sudo apt-get install –y php5-cli

ACCESSING GPIO FROM LINUX BASED SYSTEMSIT’S SO EASY YOU WON’T BELIEVE IT

GENERAL PURPOSE INPUT/OUTPUT (GPIO)

• A generic pin on an integrated circuit (IC) whose behavior is controlled at runtime

• Use to control and transfer data to and from external devices to the IC

• Available on all general purpose IC boards

IT’S ALL IN THE FILE SYSTEM

• Linux GPIO Sysfs Interface for Userspace

• Root directory is at /sys/class/gpio

• Control Interfaces

• Pin Interfaces

CONTROL INTERFACE

• “export” creates a node to expose a GPIO port to the user space

• “echo 18 > /sys/class/gpio/export” will create a gpio18 node at “/sys/class/gpio/gpio18”

• “unexport” removes the node for a GPIO port from the user space• “echo 18 > /sys/class/gpio/unexport” removes

the gpio18 node

GPIO SIGNALS

• “direction” determines the direction of a pin. Valid values are “in” and “out”. “in” is used for interrupts

• “echo out > /sys/class/gpio/gpio18/direction” will set GPIO pin 18 ’s direction as out

• “value” is the value of a pin. It reads a “0” or “1”. Any on-zero value written will be interpreted as “1”. When reading the value ”high” evaluates to ”1” and “low” evaluates to “0” unless overridden by “active_low”

• “echo 1 > /sys/class/gpio/gpio18/value” sets the value of GPIO 18 to “1” and closes the circuit

• “cat /sys/class/gpio/gpio18/value” would return “1” after the statement above

GPIO SIGNALS CONTINUED

• “edge” is used to tell the GPIO when to write to ”value” when “direction” is “in”. Valid values are “none”, “rising”, ”falling”, and “both”.

• “echo both > sys/class/gpio/gpio18/edge” will trigger an interrupt when voltage increases or decreases

• “active_low” is used to invert the effect of “edge” of “value”. Valid values are “1`” and “0”. “1” inverts and “0” sets standard.• “echo 1> sys/class/gpio/gpio18/active_low” will

invert the values of high and low

PHP ACCESS TO GPIOCAT SKINNING 101

USE FILE SYSTEM ACCESS

• ”file_get_contents”

• “file_put_contents”

• “fopen”

• Streams

ICICLE.IO

• Event loop

• Single thread

• Asynchronous I/O

• HTTP server

• File system I/O

• Real IoT

DEMO TIME

FURTHER READING

• Raspberry Pi: https://www.raspberrypi.org/

• Linux Kernel GPIO Sysfs: https://www.kernel.org/doc/Documentation/gpio/sysfs.txt

• Examples for GPIO in Bash and PHP: https://github.com/aenglander/php-io

• Icicle.io: https://icicle.io/

CONTACT INFO

• @adam_englander on Twitter

• adam@launchkey.com

• aenglander on Freenode

• aenglander on GitHub

• adamenglander on Linkedn

top related