Samsung Open Source Group 1
IoT:From micro controllers
to productsusing
Philippe CovalSamsung Open Source Group / SRUK
“IoT with the Best” Online conference#IOTWTB <2016-10-29>
Samsung Open Source Group 2
Hello World !
● Philippe Coval– Software engineer for Samsung OSG
● Belongs to SRUK team, based in Rennes, France● Ask me for IoTivity support on Tizen platform and others
– Interests● Libre Soft/Hard/ware, Communities, Interoperability
– DIY, Embedded, Mobile, Wearables, Automotive...
– Find me online● https://wiki.tizen.org/wiki/User:Pcoval
Samsung Open Source Group 3
Agenda
● What is IoT ?● IoTivity framework for connected devices● Example● Deployed on Arduino and Tizen Mobile Wearable devices● More● Q&A
Samsung Open Source Group 4
Internet of Things is: A complex equation
● Where all parameters are correlated :– Connectivity: not only Internet, probably IP, but not only
● Personal (<1m), Local (<10m - 10km), Metropolitan (<10km), Wide Area (<1000Km)
– Security matters ! (during all expected life span)● Several surfaces of attacks: service, monitoring, upgrade
– Cost of materials and cost of usage:● Computing capability (CPU or MCU?), consumption, if 24x7● Development, maintenance: FLOSS or Closed source ?
Samsung Open Source Group 5
● Many Silos / Many implementations :– One app per device (better than many remote controls)
– Dependence on centralized models (hub/cloud)
● Many concerns or issues:– Security/Privacy concerns?– Long term support and maintenance?
– Do we want critical devices exposed to the Internet ?
● Few Interoperability/Interconnection of today's things.
IoT: Internet of Today or Internet of Troubles ?
Samsung Open Source Group 6
IoT: Internet of Tomorrow? Internet of Trust?
● “I” like Interoperability – <blink>Local connectivity between devices</blink>
– Interconnect any protocols or on line services
● “O” like Openness– Open standards, protocol, implementations
● “T” like Trustworthy– Security is sine qua non condition for IoT
– Today, gateway is a reasonable answer
Samsung Open Source Group 7
“Talk is cheap. Show me the code.”
~ Linus Torvalds
Samsung Open Source Group 8
“I” like framework
● Seamless device to device connectivity for IoT– Core: Discovery, Secure Transmission, Data/Device
– Plus profile services : SmartHome, Automotive, Health...
● C/C++ library (Apache 2.0) – RESTfull design : CoAP and CBOR
● Backed by Open Connectivity Foundation– Establishes standard, certifies of products, propose models
– With industry support (Samsung, Intel, Cisco, GE, +190)
Samsung Open Source Group 9
OCF is standard / IoTivity is implementation
● Based on existing standards or solutions– Interacts with other standards: uPnP, AllSeen
● Current features:– Discovery (IETF RFC7252 / IP Multicast)
– Communication (RESTfull API on CoAP) w/ Security (DTLS)
– Transports (IP, WiFi, BT, BLE, Zigbee...)
– Data/Device management, web services, cloud, plugins...
● Today I explain only discovery and notification mechanism
Samsung Open Source Group 10
“The secret of getting aheadis getting started.”
~ Mark Twain
Samsung Open Source Group 11
Challenge yourself !
● No limit: sensors, robotics, from cat feeder to autonomous vehicles● Start with simplest example:
– Led blinking is the “hello word” for embedded developer● Using GPIO
– Then we can replace LED by a relay
● And make is visible by several connected clients– And notify them on each change
● Today mission: multi controlled binary switch (Flip/Flop)● Shared resource is boolean (on/off) as READ and WRITE mode
Samsung Open Source Group 12
Typical flow
● Resource is identified by an URI and composed of properties– To be Created, Read, Updated, Deleted, + Notified (CRUD+N)
IoTivity Server IoTivity Client(s)Network
Registration of resource
Handling new requests Set/Get/ing properties values
Initialization as server Initialization as client
Handling new clients Discovery of resource
( POST/PUT GET )
(CoAP Multicast)
Samsung Open Source Group 13
Let's develop a client/server
● You can start an Arduino project– IoTivity CSDK code is cross platform
– Suggestion: Try to make a portable project too
● Or on a friendly GNU/Linux environment:– Debian/Ubuntu, Tizen, Yocto (meta-oic), OpenWRT
– Try to Isolate platform code (syscalls, POSIX, GPIO)
– Use your favorites tools, IDE, debug, log, trace, QA
Samsung Open Source Group 14
Get your hands on IoTivity!
● Get and build libraries: https://wiki.iotivity.org/build– Download sources and dependencies
● Build current version 1.1.1 using scons
– Or if OS shipping IoTivity ● Tizen, Yocto based Automotive Grade Linux GENIVI ...● Use it a regular library (CPPFLAGS & LDFLAGS)
● Look at tree: https://wiki.iotivity.org/sources– Samples apps: resource/examples
– C SDK: resource/csdk or C++ SDK: resource/resource/src
Samsung Open Source Group 15
IoTivity CSDK flow : Create Resource
OCInit(... OC_SERVER);OCCreateResource( …, onOCEntity); { OCProcess(); }
OCInit(... OC_CLIENT);
IoTivity Server IoTivity Client(s)IP NetworkIP Network
● Initialization is trivial● Then server create a new resource
– and registers a callback to serve client– and waits for new client(s) requests
Samsung Open Source Group 16
IoTivity CSDK flow: Discovery of resource
OCInit(NULL, 0, OC_SERVER);OCCreateResource( …, onOCEntity); { OCProcess(); }
OCInit(NULL, 0, OC_CLIENT); OCDoResource(...,OC_REST_DISCOVER, ...) onDiscover(... OCClientResponse ...)
IoTivity Server IoTivity Client(s)IP NetworkIP Network
● Client attempts to discover server's resources– and finds registered ones
Samsung Open Source Group 17
IoTivity CSDK flow: GET Request
OCInit(..., OC_SERVER);OCCreateResource( …, onOCEntity); { OCProcess(); }
onOCEntity(entityHandlerRequest) { switch entityHandlerRequest->method { case 'GET' : // READ current value ... OCDoResponse(&response); }}
OCInit(..., OC_CLIENT); OCDoResource(...,OC_REST_DISCOVER, ...) onDiscover(... OCClientResponse ...)
OCDoResource(...OC_REST_GET …) onGet(... OCClientResponse ...)
IoTivity Server IoTivity Client(s)IP NetworkIP Network
● Client is asking– for resource's value
● Server is responding
Samsung Open Source Group 18
OCDoResource(...OC_REST_PUT …) onPut(... OCClientResponse ...)
IoTivity CSDK flow: PUT request
OCInit(..., OC_SERVER);OCCreateResource( …, onOCEntity); { OCProcess(); }
onOCEntity(entityHandlerRequest) { switch entityHandlerRequest->method { case 'POST: // Create value case 'PUT' : // Update new resource // handling the change case 'GET' : // READ current value ... OCDoResponse(&response); }}
OCInit(..., OC_CLIENT); OCDoResource(...,OC_REST_DISCOVER, ...) onDiscover(... OCClientResponse ...)
IoTivity Server IoTivity Client(s)IP NetworkIP Network
● Client sets resource's value● Server is handling it
– and responding
Samsung Open Source Group 19
OCDoResource(...OC_REST_PUT …) onPut(... OCClientResponse ...)
IoTivity CSDK flow: Notification/Observation
OCInit(..., OC_SERVER);OCCreateResource( …, onOCEntity); { OCProcess(); }
onOCEntity(entityHandlerRequest) { switch entityHandlerRequest->method { case 'POST: // Create value case 'PUT' : // Update new resource OCNotifyAllObservers(); case 'GET' : // READ current value ... OCDoResponse(&response); }}
OCInit(..., OC_CLIENT); OCDoResource(...,OC_REST_DISCOVER, ...) onDiscover(... OCClientResponse ...)
IoTivity Server IoTivity Client(s)IP NetworkIP Network
onObserve(... OCClientResponse ...)
● All subscribed clients– are notified of the change
Samsung Open Source Group 20
“I'm not crazy. My reality is just different from yours.”
~ Lewis Carroll
Samsung Open Source Group 21
Microcontrollers (MCU)
● A microcontroller is a System on Chip (SoC)– Digital I/O, A/D & D/A Conversion, Serial Interface, Timers
– Flash Memory, Static RAM
● Arduino : OSHW Electronic prototyping platform– Huge community, OOP libraries, education purposes
– Supports daughter boards called shields, ie: Ethernet, WiFi, etc
● Baremetal development– main loop program have direct access to hardware
● Note that many operating system for MCU are existing
Samsung Open Source Group 22
IoTivity is supporting Arduino atmega256
● IoTivity CSDK use atmega256 as reference target– Based on Atmel ATmega2560 MCU (8KiB RAM, 256KiB of Flash, 16Mhz)
● Class 2 Constrained device (RFC7228 ~ 50 KiB data ~ 250 KiB code)
– Build it using scons tool:scons resource \ TARGET_OS=arduino TARGET_ARCH=avr BOARD=mega SHIELD=ETH
– It will download toolchain, and build using avr-gcc & avr-g++
– And produce a set of static libs (~100KiB) to be linked with any program:● libcoap.a, liboctbstack.a, libconnectivity_abstraction,a ...
Samsung Open Source Group 23
Port server code to Arduino API
● Adapt/rewrite platform code: sleep(sec) vs delay(ms)– Initialize Ethernet, GPIO (pinMode, digitalWrite)
● Update build scripts (tip: use Arduino-Makefile/Arduino.mk)– Note Arduino API are using C++ POO while ours in plain C
– Trick: symlink or echo “#include “$file.c” “ > “$file.c.tmp.cpp”
– LOCAL_CPP_SRCS += src/server.c.tmp.cpp
● Deploy server using Arduino's avrdure: (117056 bytes of flash) ● Use client(s) on GNU/Linux or port code for other devices
Samsung Open Source Group 24
Hardware integration : DIY or Modules?
● High voltage relay (0-220V)– Signal = Base of NPN Transistor
● Simples modules, to wire on headers– Ie: Single channel Relay (HXJ-36) : 0V, +5V, GPIO
SBC
Relay 5VFinder F34
30.22.7.005.0010
Vcc 2
?
GND 2
Vcc 1+ 5V
GND 1
Transistor NPNP2N 2222A
Resistor *
(*) ARTIK10 | MinnowMax 47 OHM (yellow, purple, black)
C
B
E
o
oo
o
GPIO
(*) RaspberryPI 180 OHM (brown, grey, brown)
GND1GND1
GPIOGPIOPin Pin 13 13
Vcc1Vcc1(5v)(5v)
Vcc2Vcc2
GND2GND2
Samsung Open Source Group 25
What is a friend?A single soul dwelling in two bodies
~ Aristotle
Samsung Open Source Group 26
Interaction with products
● Tizen is an Operating System based on FLOSS● Shipped into consumer electronics products● Tizen IoTivity
– Tizen:3 contains as platform package (.rpm)
– Tizen:2 can ship shared lib into native app (.tpk)● For Samsung Z{1,2,3} (Tizen:2.4:Mobile)● Samsung GearS2 (Tizen:2.3.1:Wearable)
Samsung Open Source Group 27
Build Tizen clients 1/2: build library
● Setup and configure GBS for :– Tizen:2.4:Mobile for Z1
– Tizen:2.3.1:Wearable for Gear S2
– Tizen:3.0 for x86 or ARM
● Build dependencies 1st : (scons, boost...)– git clone $URL -b ${branch} # (ie: tizen, tizen_2.4)
– gbs build -p ${profile} # (ie: tizen_mobile-armv7l)
● In the end : iotivity-*.rpm
Samsung Open Source Group 28
Build Tizen clients 2/2: create App
● Using Tizen SDK, create native tizen project– Unpack lib and headers from: iotivity-*.rpm iotivity-devel*.rpm
– Update build and link flags (see wiki)
– cp usr/lib/*.so lib and make deploy package (.tpk)
● Adapt EFL gui and integrate IoTivity– Create UI using elementary widgets toolkit
– Use previous CSDK client (or write it again using C++)● Start IoTivity client in a separate thread
– Update UI on IoTivity events (main loop)
Samsung Open Source Group 29
IoTivity hardware to hack on:
● Single Board Computers with daughters boards– ARTIK 5,10,7 are also compatible with Arduino Shields
– Raspberry Pi + hats (RabbitMax Flex, CoPiino)
– Minnowboard + lures (Calamari, Tadpole), Edison
● Other micro controllers: – ESP8266, Arduino 101, Galileo
● Yours? Tell us: https://wiki.iotivity.org/hardware● IoTivity is also supported outside GNU/Linux or Tizen
Samsung Open Source Group 30
You can even create your own Tizen device
● Since Tizen 3, Tizen:Common was introduced● A profile to create new profiles on:
– 90% Tizen:IVI (cars) is Tizen Common
– IoTivity is part of Tizen:Common
● Like “your Tizen gateway” profile– Start by installing OS for supported devices (ARM or Intel)
● Or port to new architecture hardware using GBS or Yocto
Samsung Open Source Group 31
“Any sufficiently advanced technology is indistinguishable from magic.” ~ Arthur C. Clarke
Samsung Open Source Group 32
iotivity-arduino-20161006rzrhttps://vimeo.com/185851073#iotivity-arduino-20161006rzr
Samsung Open Source Group 33
Want More ?
● More constrained: – Iotivity-constrained: RIOT, Contiki, Zephyr...
– Tizen Micro (RTOS + JerryScript + IoT.js), Tizen Nano...
● More connectivity: BT, BLE, Zigbee, LTE, NFC...● Security & scale: Deploy an OCF network of sensors
– For Smart (Home | Car | City | $profile)
Samsung Open Source Group 34
Summary
● IoT is not only about apps or cloud but new connections between things● Open Connectivity Foundation
– establishes a standard for interconnecting things
– Open Source IoTivity project implements it
● Devices can be connected using IoTivity:– Micro controllers are part of IoT
– Arduino are great development platforms for prototyping
– Tizen OS is shipped into today products or into your own design● And many more OS or hardware
Samsung Open Source Group 35
References
● Entry point:– https://wiki.iotivity.org/examples
– git clone iotivity-example -b sandbox/pcoval/arduino
● Technical references– https://openconnectivity.org/resources/iotivity
● OIC_1.1_Candidate_Specification.zip
– http://www.atmel.com/Images/\● Atmel-2549-8-bit-AVR-Microcontroller-ATmega640-1280-1281-2560-2561_datasheet.pdf
– https://tools.ietf.org/html/rfc7228
– https://www.tizen.org/sites/default/files/event/gb1_tdc15_tizen_micro_profile_for_low-end_iot_device.pdf
● Keep in touch online:– https://wiki.iotivity.org/community
– https://wiki.tizen.org/wiki/Meeting
– https://blogs.s-osg.org/author/pcoval/
Samsung Open Source Group 36
Q&A or/and Annexes ?
Samsung Open Source Group 37
Thank youMerci / 고맙습니다
Samung OSG, SSI,Open Connectivity Foundation, LinuxFoundation, BeMyApp,
FLOSS Communities: Tizen, Yocto, EFL, AGL, GENIVIFlatIcons (CC BY 3.0) : Freepik, xkcd.com (CC BY NC 2.5),
Libreoffice, openshot,SRUK,SEF, Intel, Rabbitmax, LabFabFr,Chao@TelecomBretagne,
IOTWTF attendees,YOU !
Contact:https://wiki.tizen.org/wiki/User:Pcoval
Samsung Open Source Group 38
iotivity-genivi-demo-platform-20160210rzrhttps://vimeo.com/154879264#iotivity-genivi-demo-platform-20160210rzr
Samsung Open Source Group 39
tizen-artik-20161010rzrhttps://vimeo.com/186286428#tizen-artik-20161010rzr