• Stars
    star
    124
  • Rank 288,207 (Top 6 %)
  • Language
    C
  • License
    Apache License 2.0
  • Created about 5 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

SmartThings SDK Reference for Direct Connected Devices for C

SmartThings SDK Reference for Direct Connected Devices for C

License

Easily integrate your Direct Connected Device using the Direct Connected Devices SDK. The SDK manages all MQTT topics and onboarding requirements, freeing you to focus on the Capabilities of your device.

To facilitate development of device applications in an original chipset SDK, the IoT core device library and supporting examples are separated into two git repositories: the IoT core device library and the Direct Connected Devices SDK repository. If you want to use the IoT core device library in your original chipset SDK that you previously installed, link the core device library to develop a device application in your existing development environment.

The Direct Connected Devices SDK is distributed in source form and written in C99 for the purpose of portability to most platforms. For a complete overview of the development process and workflow, please refer to the Direct Connected Devices documentation.

Directory Structure and Overview

  • apps: Contains sample device applications for various chipsets.
  • bsp: Contains the original chipset vendors' SDKs. If you use a chipset that has already been ported, this vendor's SDK can easily be downloaded as a submodule in this directory through the predefined script setup.py.
  • doc: Documentation.
  • iot-core: Contains the IoT core device library. It can also be downloaded as a submodule in this directory through the predefined script setup.py.
  • output: Where build outputs will be placed.
  • patches : Patches to be applied to the original chipset vendors' SDKs for resolving various problems.
  • tools: Various scripts to be applied for each chipset.

Build a Sample Device Application

The Direct Connected Devices SDK builds on the environments of each chipset vendor's SDK, providing an all-in-one development package.

Prerequisites

Install the toolchain defined in the chipset SDK you use according to the directions below. If no development environment is described for your chipset, it is assumed to only be applicable for 64-bit Ubuntu-based environments.

For ESP8266 (Ubuntu/Debian Quickstart):

  1. Set up the ESP8266 Toolchain for Linux according to the Espressif documentation.
  2. In order to use the pre-supplied SDK build script build.py, extract the toolchain into the ~/esp/xtensa-lx106-elf/ directory as directed in the Expressif documentation linked above.

The Espressif documentation linked above directs you to add the toochain path to your PATH environment variable in your ~/.profile. This step not necessary if you use the pre-supplied build script build.py - the path is automatically exported when using the build script.

For ESP32:

  1. Install Prerequisites for your build system OS.
  2. Set up the ESP32 toolchain with setup.py

For ESP32_v3.3 (Legacy - Ubuntu/Debian Quickstart):

  1. Set up the ESP32 Toolchain for Linux according to the Espressif documentation.
  2. In order to use the pre-supplied build script build.py, extract the toolchain to ~/esp/xtensa-esp32-elf/ as directed in the original Expressif documentation.

The Espressif documentation linked above directs you to add the toochain path to your PATH environment variable in your ~/.profile. This step not necessary if you use the pre-supplied build script build.py - the path is automatically exported when using the build script.

For RTL8195:

For Windows systems:

  1. Install the mbed Microcontroller to use the USB serial port on Windows.
  2. Upgrade DAP firmware. The recommended DAP firmware is DAP_FW_Ameba_V12_1_3-2M.bin.

The above steps are applicable for a Windows PC for downloading a binary. You must build the source code on Cygwin or linux for this chipset.

For EMW3166:

  1. Set up the MiCoder Toolchain for Linux according to the MXCHIP documentation.
  2. Install MiCO Cube. In order to use the pre-supplied build script build.py, set mico config --global MICODER /path_of_the_toolchain

Build

  1. Download the Direct Connected Device SDK source code as shown in the example below and run setup.py.

setup.py will automatically download the ported original chipset vendor's SDKs as submodules in the bsp directory through the setup.py script. If a chipset vendor's SDK does not exist in git format, you can manually copy it to the bsp directory. At this time, the IoT Core Device Library will also be downloaded to the iot-core directory.

$ cd ~
$ git clone https://github.com/SmartThingsCommunity/st-device-sdk-c-ref.git
$ cd st-device-sdk-c-ref
$ python setup.py
Usage: python setup.py [BSP_NAME]
--------------------------------------------------
ex) python setup.py rtl8721c
ex) python setup.py rtl8720c
ex) python setup.py rtl8195
ex) python setup.py esp32_v3.3
ex) python setup.py emw3080
ex) python setup.py emw3166
ex) python setup.py esp8266
ex) python setup.py esp32
ex) python setup.py esp32s2
ex) python setup.py esp32c3
  1. Check the build configuration of a sample device application (apps folder). If you want to use specific build options, you can directly modify the build configuration file (e.g. sdkconfig, sdkconfig.h) at the root directory of a sample device application. On the Espressif chipset, you can additionally use the menuconfig option for configuration.

If you want to use the default build configuration, you can skip this step.

  • ESP32 Example:

    Note that the menuconfig option is only supported on the Espressif chipset.

    # python build.py {app_path} {option}
    $ cd ~/st-device-sdk-c-ref
    $ python build.py apps/esp32/switch_example menuconfig
  1. Run build.py in the SDK's root directory. This builds the sample executables and places them in output/{chip_name}/.

    $ python build.py apps/esp32/switch_example          # python build.py {app_path}
    

Flash and Monitor

The serial port of your device must to be matched to the computer environment for serial port flashing and monitoring. This data is described in the build configuration file (sdkconfig)

Chipset Buad Rate for Flashing Baud Rate for Monitoring Data Bit Parity Stop Bits
ESP8266/ESP32 115200 74880 8 None 1
RTL8195 115200 115200 8 None 1
EMW3166 9600 (user UART) 115200 (USB UART) 8 None 1

Flashing

Flashing can be done according to the method outlined by the applicable chipset SDK.

ESP8266/ESP32 Example:

You can flash the executables into a target device via build.py with additional options.

You do not need to run python build.py esp32 st_switch before running python build.py esp32 st_switch flash; this will automatically rebuild anything which needs it.

Available Options:

  • clean: clean previous build outputs
    # python build.py {app_path} {options}
    $ python build.py apps/esp32/switch_example clean
  • flash: download executable binaries to the device
  • monitor: monitor the serial output of device. this option can be used with flash option.
    # python build.py {app_path} {options}
    $ python build.py apps/esp32/switch_example flash monitor
RTL8195 Example:

In order to flash the RTL chipset binary, the steps below must be performed on a Windows PC, even if you build the source code on a Linux environment.

  1. Connect Ameba RTL8195 to a Windows PC; a removable disk MBED will appear.
  2. Copy ram_all.bin from output/rtl8195/iotcore_xxx/ram_all.bin to MBED.
  3. After successfully copying, reset Ameba RTL8195 target and monitor.
EMW3166 Example

In order to flash the MXCHIP emw3166 chipset binary, the steps below must be performed on a Windows PC with a terminal that supports Ymodem transmission.

  1. Connect user UART (PB7-tx, PB6-rx) of emw3166 to a Windows PC with a USB-TTL converter. Then connect USB UART power.
  2. Create a serial session with flashing config (Baud rate 9600) to connect the user UART port, then hold 'BOOT' and press 'RESET' to enable flashing.
  3. Transfer the binary file located in output/emw3166/iotcore_xxx/[email protected] using Ymodem on your terminal.
  4. After transfer is successful, press 'RESET' on MiCOKit-3166 target and monitor with USB UART.

License

This library is licensed under the Apache License Ver2.0.

More Repositories

1

SmartThingsPublic

SmartThings open-source DeviceType Handlers and SmartApps code
Groovy
2,556
star
2

SmartThingsEdgeDrivers

Lua
256
star
3

smartthings-cli

Command-line Interface for the SmartThings APIs.
TypeScript
233
star
4

smartapp-sdk-nodejs

Javascript/NodeJS SDK to create SmartThings SmartApps
JavaScript
142
star
5

st-device-sdk-c

SmartThings SDK for Direct Connected Devices for C
C
122
star
6

smartthings-core-sdk

SDK for calling the SmartThings API from JavaScript and TypeScript applications
TypeScript
113
star
7

Code

DEPRECATED A collection of code examples from the SmartThings team, and the community
Groovy
81
star
8

weather-color-light-smartapp-nodejs

This SmartApp sets the color of a light based on the weather forecast.
JavaScript
56
star
9

smartapp-sdk-java

A collection of consumer-oriented Java (JVM) libraries for creating SmartApps and using the public API
Java
50
star
10

cli-example-nodejs

An example CLI to interact with SmartThings-connected devices, written in Node.js
JavaScript
37
star
11

st-schema-nodejs

ST Schema helper library for NodeJS
JavaScript
36
star
12

app-examples

JavaScript
12
star
13

example-lifx-nodejs-web-connector

LIFX C2C connector implementation as NodeJS web service
JavaScript
12
star
14

st-schema-connectors

Example connectors written for ST Schema
JavaScript
10
star
15

api-app-subscription-example-js

Example API Access SmartApp that shows the state and allows control of devices
JavaScript
9
star
16

api-app-minimal-example-js

Simple API Access integration that allows scenes to be executed
JavaScript
8
star
17

st-schema-oauth-example

Compete ST Schema connector example including OAuth server and virtual device web app
JavaScript
8
star
18

dynamodb-context-store-nodejs

Stores SmartApp configuration and auth tokens for use in app-initiated calls
JavaScript
7
star
19

acme-control-panel-example

Example SmartApp that creates C2C devices as well as providing scene and device control
JavaScript
7
star
20

generator-smartthings

Yeoman generator to bootstrap a SmartThings Cloud SDK-based app
JavaScript
6
star
21

MyCloudToCloudSchemaConnection

JavaScript
5
star
22

homebrew-smartthings

Ruby
4
star
23

smartapp-example-no-devices-nodejs-lambda

Give Lambda SmartApps a try without any physical devices.
JavaScript
4
star
24

smartapp-example-open-close-nodets

The Typescript version of the Open/Close example SmartApp.
TypeScript
3
star
25

example-lifx-lambda-connector

Imports LIFX devices into SmartThings
JavaScript
3
star
26

edge-cli-plugin

TypeScript
3
star
27

st-schema-simple-example-js

Very simple ST-Schema connector that creates one device
JavaScript
2
star
28

smartapp-example-every-setting-nodejs

This SmartApp has multiple configuration pages that contain examples of all setting types.
JavaScript
2
star
29

firestore-context-store-nodejs

Stores SmartApp configuration and auth tokens for use in app-initiated calls
JavaScript
2
star
30

github-actions

A library of reusable workflows
2
star
31

st-schema-callback-example-js

ST Schema virtual device example with proactive state updates
JavaScript
2
star
32

file-context-store-nodejs

File-based context store for SmartApps
JavaScript
1
star
33

device-scene-example-nodejs

Example SmartApp that stores installed app context makes callback to the SmartThings platform
JavaScript
1
star
34

slack-nodejs-workshop

JavaScript
1
star
35

smartapp-example-open-close-nodejs

This SmartApp turns on and off a light when something opens and closes.
JavaScript
1
star
36

drlc-prototype

JavaScript
1
star
37

dummy-oauth-server

OAuth2 server intended for testing clients, especially ST Schema connectors
1
star