The main goal of this project is to integrate the C++/Python AWS IoT SDK source into the QCS610 SoC target platform and build an application to post the status of camera recordings to the AWS IoT core console.
Objective
The main objective of this project is to get familiar with the QCS610 development kit and the AWS IoT SDK. It is designed to integrate the AWS IoT SDK and send the status of camera recordings to the AWS IoT core console.
Equipment Required / Parts List / Tools
Equipment | Description |
---|---|
Thundercomm TurboX C610 development board | Link to purchase the development kit: https://www.thundercomm.com/app_en/product/1593776185472315?index=1&categoryId=categorynull |
USB Cables | For serial console interface, ADB and fastboot commands. USB3.0 Type C port for connecting to the board and flashing images. |
Additional Resources
Resource Title | Link or File Name (and provide file) |
---|---|
Thundercomm TurboX C610 Platform Linux User Guide | Please refer to technical documents section on the product page: https://www.thundercomm.com/app_en/product/1593776185472315?index=1&categoryId=categorynull |
About the project
This project is designed to integrate the AWS IoT SDK into the QCS610 platform and create a small application to notify the current status of the camera to the AWS IoT core console. The source tree of the project starts with the application directory (/home/user/aws-iot)
aws-iot/
- video_record.c
- video_record.h
- basic_pub_sub/
- cJSON.c , cJSON.h , main.cpp, CMakeLists.txt
- publish.py
- certificates/
- xxxx-certificate.pem.crt, xxxx-private.pem.key, root-CA.crt
- publish
- videoaws
Dependencies
- Ubuntu System 18.04 or above
- Install Adb tool (Android debugging bridge) on host system
- Setup the QCS610 Yocto build environment
- Valid Amazon AWS user account
- Install python3.5 or above on the host system
Note: For python implementation, building on the yocto environment is not required (but would be necessary for c++ implementation).
Prerequisites
- Setting up the Application SDK on the host system.
- Camera environment configuration setup on the target device.
- Setting up aws-iot device on aws console.
- Compiled the aws-iot-c++ SDK on yocto environment.
- Setting up the Application SDK on the host system.
- To install the application SDK, download from the given url: https://thundercomm.s3.ap-northeast-1.amazonaws.com/shop/doc/1593776185472315/Turbox-C610_Application-SDK_v1.0.tar.gz
- Unpack the SDK using below command.
$ tar -xzvf Turbox-C610_Application-SDK_v1.0.tar.gz
- Execute the below script file, it will ask the default target directory, press enter and input ‘Y’
$ ./oecore-x86_64-armv7ahf-neon-toolchain-nodistro.0.sh
Now the environment setup is complete.
Further reference refers the below document https://www.thundercomm.com/app_en/product/1593776185472315
- Camera Environment configuration setup on the target device
- Setting up AWS IoT connect
Please refer to the link below to connect with AWS IoT services. Inside the IoT quick start document in step 2, while creating the think object, select device as python instead of node-js.
https://docs.aws.amazon.com/iot/latest/developerguide/iot-quick-start.html
Save the credentials to the certificates folder in the application directory.
- Compiling the aws-iot-c++ sdk on yocto environment
To setup the camera environment configuration follow the below document ‘Turbox-C610_Open_Kit_Software_User_Manual_LE1.0_v2.0.pdf’ From url below
https://www.thundercomm.com/app_en/product/1593776185472315 and Refer section 2.10.1
Step-1 : clone the meta-aws repository to your host system
$ git clone https://github.com/aws/meta-aws.git
Step-2 : copy the aws-iot-device-sdk-cpp-v2 to yocto project environment
$ cp meta-aws-master/recipes-sdk/ <working directory>/poky/meta-aws /recipes-sdk/ $ cd <working directory>
Step-3 : Initialize the build environment
$ export SHELL=/bin/bash
$ source poky/qti-conf/set_bb_env.sh
Select “qcs610-odk meta-qti-bsp” from the available machine’s menu. On selecting the machine, the ncurses menu starts. Select “qti-distro-fullstack-perf meta-qti-bsp” from Available Distributions menu.
The shell prompt will now move to the following build directory
<working directory>/build-qti-distro-fullstack-perf $
Step-4 : Add the aws-meta path in bblayers.conf file in ‘<working directory>/build-qti-distro-fullstack-perf/conf/bblayers.conf ’ folder.
Step-5 : run the bitbake command
$ bitbake aws-iot-device-sdk-cpp-v2
After successfully running this command, you can find the required compiled library as well as include folders generated in the path “<build_directory>/tmp-gibc/sysroots-components/armv7ahf-neon/aws-iot-device-sdk-cpp-v2/usr/”, copy the lib/ folders to the application directory.
$ cp <build_directory>/tmp-gibc/sysroots-components/armv7ahf-neon
/aws-iot-device-sdk-cpp-v2/usr/lib /home/user/iot_aws/.
Step-6 : To compile the application, use the bitbake command below
$ bitbake -c compile -f aws-iot-device-sdk-cpp-v2
Step-7 : After successfully running the bitbake command you can find the git version of code available in “<build_directory>/tmp-gibc/work/armv7ahf-neon- oe-linux-gnueabi/aws-iot-device-sdk-cpp-v2/1.6.0-r0/” folder. Replace the current basic_pub_sub folder in path “git/samples/mqtt/basic_pub_sub” with ‘basic_pub_sub’ folder given in our repository. Execute the bitbake command given in step-6. After the successful execution, the target binary will be generated in the “build/samples/mqtt/basic_pub_sub/basic_pub_sub” folder
Step-8 : Rename the binary ‘basic_pub_sub’ to ‘publish’ and copy it to the application directory. Also copy the libcJSON.so file to lib/ folder in the application directory.
$ cp <build_directory>/tmp-gibc/work/armv7ahf-neon-oe-linux-gnueabi/
aws-iot-device-sdk-cpp-v2/1.6.0-r0/build/samples/mqtt/basic_pub_sub/publish
/home/user/iot_aws/.
$ cp <build_directory>/tmp-gibc/work/armv7ahf-neon-oe-linux-gnueabi/
aws-iot-device-sdk-cpp-v2/1.6.0-r0/build/samples/mqtt/basic_pub_sub/libcJSON.so
/home/user/iot_aws/lib/.
Steps to build and run the application:
- Building the camera application:
- Step for including aws cert-key files
- Step for AWS Python IOT sdk Integration
- Step for AWS IoT c++ SDK Integration to the target board
- Execute the binary file in the target environment.
Step-1 : Enter command below to set up the cross compilation environment on the host system.
$ git clone <source repository>
Copy the source repository to the application directory (aws-iot)
$ cp <source repository> /home/user/aws-iot/
$ cd aws-iot
$ source /usr/local/oecore-x86_64/environment-setup-armv7ahf-neon-oe
-linux-gnueabi
Step-2 : Build the camera application binary using command below.
$ $CC video_record.c video_record.h -o videoaws `pkg-config --cflags --libs
gstreamer-1.0`
Step-3 : Push the camera application binary to the target board with adb command.
$ adb root
$ adb remount
$ adb shell mount -o remount,rw /
$ adb forward tcp:8900 tcp:8900
$ adb push videoaws /data/aws-iot/
$ adb push certificates /data/aws-iot/
Edit the publish.py and basic_pub_sub/main.cpp files to update the certificate details present in /home/user/aws-iot/certificates.
Step-1 : push the aws-iot-python-sdk, and python source code to the target board
$ git clone https://github.com/aws/aws-iot-device-sdk-python.git
$ cd aws-iot-device-sdk-python
$ adb push AWSIoTPythonSDK/ /data/aws-iot/
$ cd ..
$ adb publish.py /data/aws-iot/
Step-2 : push the json library folder to the python 3.5 library folder on the target board
$ adb push json/ /usr/lib/python3.5/
$ adb shell
/# chmod +x /data/aws-iot/videoaws
Note: Ensure that you have already downloaded the meta-aws repository source code from github and compile the aws-iot-c++ sdk on the yocto environment (steps are given in prerequisites section of this project)
Step-1 : push the aws-iot-c++ SDK compiled library to the target board.
$ adb push lib/ /data/aws-iot/
Step-2 : push the c++ target executable to the target board
$ adb push publish /data/aws-iot/
To start the application, run the below commands on the Qualcomm QCS610 development board. Select the command line option as given in the table for different video formats. To stop capturing press “Ctrl + C” on the terminal of the target board. Video will be stored or streamed as per the given command line option.
/# cd data/aws_iot/
To enable Wi-Fi
/# wpa_supplicant -Dnl80211 -iwlan0 -c /etc/misc/wifi/Wpa_Supplicant.conf -ddddt &
/# dhcpcd wlan0
/ # export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/aws_iot/lib/
/# ./videoaws {video_format} {output_path/ip} {c++/python}
Video format | cmdline-1 | cmdline-2 | cmdline-3 |
---|---|---|---|
4K Video | 4k | /data/4k.mp4 | c++/python |
HD video | 1080p | /data/1080p.mp4 | c++/python |
Tcp Streaming | tcp | 127.0.0.1 | c++/python |
Example: for playing 4k video
/# ./videoaws 4k /data/video/4k.mp4 c++
Whenever the camera application starts and stops capturing, the application is designed to establish connection to the aws-iot-core and publish the current status of the camera details in json format to the particular topic. The details include recording format, device details and current action of the camera. The subscriber of this topic can receive the camera details.
To Download video:
Using the adb pull command we can download the video to the host system.
$ adb pull /data/4k.mp4
To see the live streaming, open the new terminal in the host system and enter below command. Also make sure you have installed the ‘vlc player’ on the host system in order to view video playback.
$ adb forward tcp:8900 tcp:8900
$ vlc -vvv tcp://127.0.0.1:8900
Qualcomm QCS610 is a product of Qualcomm Technologies, Inc., and/or its subsidiaries.
Contributor(s) Info
Name | Title Company |
---|---|
Rakesh Sankar [email protected] | Sr, System Architect Global Edge Software Ltd |
Ashish Tiwari [email protected] | Architect Global Edge Software Ltd |
Ramsingh G [email protected] | Senior Software Engineer Global Edge Software Ltd |
Priyanka K S [email protected] | Software Engineer Global Edge Software Ltd |