• Stars
    star
    118
  • Rank 299,923 (Top 6 %)
  • Language
    C
  • License
    MIT License
  • Created about 7 years ago
  • Updated over 2 years ago

Reviews

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

Repository Details

device sdk for baidu IoT Core service, in c. Including MQTT client

百度云天工物联网平台 IoTCore SDK for C

此代码库包含以下组件:

  • iotcore_client(IoTCore SDK for C) 帮助设备快速接入百度云天工IoTCore服务
  • Serializer函数库帮助进行序列化和反序列化数据,来进行数据在设备上的存储或读取

IoTCore SDK for C

  • 代码使用ANSI C(C99)规范,从而使代码更方便移植到不同的平台中
  • 请避免使用编译器扩展选项,防止在不同平台上编译的不同行为表现
  • 在IoTCore SDK中,使用了一个平台抽象层,以隔离操作系统相关性(线程和互斥机制,通信协议,例如HTTP等)。

如何克隆资源库

该代码库使用了一些第三方库作为子模块依赖关系。为了自动克隆这些子模块,您需要使用如下所述的--recursive选项:

	git clone --recursive https://github.com/baidu/iot-sdk-c.git

OS平台和硬件兼容性

百度天工IoTCore SDK可用于广泛的操作系统平台和设备。对于设备的最低要求是:

  • 能够建立IP连接:只有IP功能的设备可以直接与IoTCore进行通信。
  • 支持TLS(可选):推荐设备使用TLS来与IoTCore进行安全连接。 但这不是必需的。 IoTCore SDK也支持使用用户名/密码的方式进行非加密通讯
  • 具有实时时钟或实现代码连接到NTP服务器(可选):如果你使用TLS连接或使用安全令牌以进行身份​​验证,时钟同步是必需的。
  • 具有至少64KB的RAM:SDK的具体内存占用取决于所使用的SDK文件、协议以及目标平台。我们尽可能将占用减到最低。

SDK目录结构

  • /c-utility

    引用的git子模块,使用的第三方工具库。请注意,其中可能包含嵌套子模块。

  • /umqtt

    引用的git子模块,使用的第三方MQTT客户端。请注意,其中可能包含嵌套子模块。

  • /parson

    引用的git子模块,使用的第三方的JSON库。请注意,其中可能包含嵌套子模块

  • /certs

    包含与 IoT Core 进行通信所需的证书。

  • /build_all

    包含客户端库和相关组件的针对指定平台的编译脚本。

  • /iotcore_client

    包含IoTCore客户端组件,连接IoTCore服务,并发送和接受消息。有关如何使用它的信息,请参阅https://cloud.baidu.com/doc/IoTCore/index.html

  • /serializer

    包含在原始消息库之上提供存储和JSON序列化功能的库。这些库便于上传结构化数据以及用于 IoT Core 服务的命令和控制。

准备开发环境

这篇文章介绍如何准备开发环境来使用百度云天工的c语言版本的IoTCore SDK。这里主要介绍如何配置windows和Linux下的开发环境。

关于openssl

目前openssl LTS的版本有两个:1.0.2x1.1.x ,两者的区别在于,后者在前者的基础上优化了API接口,一些数据结构已经对开发者透明,也就是说,如果在1.0.2x可以编译成功的软件,在1.1.x版本的openssl下就无法编译成功了。正是因为这个原因,openssl组织仍需要维护之前老接口的openssl版本(因为大量软件使用的仍旧是老接口),也就是1.0.2x,但这两个版本在安全性上是等价的。本sdk使用的是1.0.2x版本。如果是用git clone openssl仓库,也务必使用-b参数注明版本!

git clone https://github.com/openssl/openssl.git -b OpenSSL_1_0_2-stable

配置Windows的开发环境

  • 安装Visual Studio 2015(或其他版本Visual Studio,针对其他版本VS,需使用相应版本的VS命令替换以下与版本号相关的命令内容),你可以使用Visual Studio Community免费版本通过遵循license许可

  • 安装Visual C++ 和 NuGet安装包管理工具

  • 安装git

    确认git是否在你的PATH环境变量目录列表,你可以使用git version来检查git的版本

      	git version
    
  • 安装CMake

    确认CMake在你的PATH环境变量目录列表,你可以使用cmake –version来测试安装是否正常并且检测版本。可以使用CMake来创建Visual Studio的项目,还可以编译libraries和样例。

    CMake官方下载地址:https://cmake.org/download

  • 编译C语言SDK

如果你想在本地编译开发和测试SDK的话,可以通过执行下面的步骤来生成项目文件:

  • 打开CMD命令行

  • 在respository的根目录运行以下命令:

      	mkdir build
      	cd build
      	cmake -G "Visual Studio 14 2015" .. 
    

    如果想编译64位程序,修改cmake参数:

      	cmake .. -G "Visual Studio 14 2015 Win64"
    

    如果

    如果项目文件成功生成的话,你应该可以看到一个Visual Studio的工程文件.sln在cmakefolder下面,可以通过下面的步骤来编译SDK

  • 在visual studio里面打开cmake\iotcore_c_sdk.sln,或者运行下面的命令来生成项目文件:

      cmake --build . -- /m /p:Configuration=Release 
    
  • 你也可以使用MSBuild argument编译用于调试的文件:

      cmake --build . -- /m /p:Configuration=Debug
    

设置Linux开发环境

这一节会介绍如何设置C SDK在ubuntu下面的开发环境。可以使用CMake来创建makefiles,执行命令make调用gcc来将他们编译成为C语言版本的SDK

  • 安装IDE开发工具,你可以下载Clion工具,链接地址:https://www.jetbrains.com/clion/, 可以直接导入现有项目,不要覆盖当前的CMake项目

  • 在编译SDK之前确认所有的依赖库都已经安装好,例如ubuntu平台,你可以执行apt-get这个命令区安装对应的安装包

      	sudo apt-get update sudo apt-get install -y git cmake build-essential curl libcurl4-openssl-dev libssl-dev uuid-dev 
    
  • 验证CMake是不是最低允许的版本2.8.12

      	cmake --version
    

    关于如何在ubuntu 14.04上将Cmake升级到3.x,可以阅读 How to install CMake 3.2 on Ubuntu 14.04

  • 验证gcc是不是最低允许的版本呢4.4.7

      	gcc  --version
    
  • 关于如何在ubuntu 14.04上将gcc升级的信息可以阅读 How do I use the latest GCC 4.9 on Ubuntu 14.04.

  • 编译C版本的SDK

    执行下面命令编译SDK:

      mkdir build
      cd build 
      cmake .. 
      cmake --build .  # append '-- -j <n>' to run <n> jobs in parallel 
    

    如果要调试可以编译binaries的话,可以通过传递下面的参数个CMake,这样就可以生成可以调试的binaries了

      cmake -DCMAKE_BUILD_TYPE=Debug .. 
    

设置macOS的开发环境

这一节介绍如何设置C语言SDK在macOS上的开发环境。CMake可以生成makefiles,make使用makefiles可以将他们编译成为c语言SDK利用clang,clang默认会包含在XCode里面,我们已经测试过c语言版本的SDK在Sierra上,对应XCode版本是8.

  • 安装IDE开发工具,你可以下载Clion工具,链接地址:https://www.jetbrains.com/clion/, 可以直接导入现有项目,不要覆盖当前的CMake项目

  • 在编译SDK之前,确保所有的dependencies都安装好。对于macOS系统,你可以使用Homebrew来安装正确的packages brew update brew install git cmake pkgconfig openssl ossp-uuid

  • 验证CMake是不是允许最低版本2.8.12

      cmake --version 
    
  • 编译C语言SDK

      mkdir build
      cd build 
      cmake -DOPENSSL_ROOT_DIR:PATH=/usr/local/opt/openssl .. 
      cmake --build .  # append '-- -j <n>' to run <n> jobs in parallel 
    
  • 如果需要编译可以调试的binaries的话,可以添加一个参数到CMake

      cmake -DOPENSSL_ROOT_DIR:PATH=/usr/local/opt/openssl -DCMAKE_BUILD_TYPE=Debug .. 
    

以上是百度IoTCore SDK的C语言版本介绍,若在其他平台上使用,请参考如何移植百度天工IOT Core C语言SDK到其他平台.

More Repositories

1

amis

前端低代码框架,通过 JSON 配置就能生成各种页面。
TypeScript
17,235
star
2

uid-generator

UniqueID generator
Java
5,429
star
3

san

A fast, portable, flexible JavaScript component framework
JavaScript
4,708
star
4

lac

百度NLP:分词,词性标注,命名实体识别,词重要性
C++
3,864
star
5

braft

An industrial-grade C++ implementation of RAFT consensus algorithm based on brpc, widely used inside Baidu to build highly-available distributed systems.
C++
3,499
star
6

dperf

dperf is a DPDK based 100Gbps network performance and load testing software.
C
3,273
star
7

bfs

The Baidu File System.
C++
2,853
star
8

openrasp

🔥Open source RASP solution
C++
2,774
star
9

Familia

A Toolkit for Industrial Topic Modeling
C++
2,638
star
10

AnyQ

FAQ-based Question Answering System
C++
2,584
star
11

sofa-pbrpc

A light-weight RPC implement of google protobuf RPC framework.
C++
2,130
star
12

Senta

Baidu's open-source Sentiment Analysis System.
Python
1,889
star
13

tera

An Internet-Scale Database.
C++
1,887
star
14

bfe-book

In-depth Understanding of BFE《深入理解BFE》(Book for BFE, a CNCF open source project. both in English and in Chinese)
1,212
star
15

BaikalDB

BaikalDB, A Distributed HTAP Database.
C++
1,169
star
16

bigflow

Baidu Bigflow is an interface that allows for writing distributed computing programs and provides lots of simple, flexible, powerful APIs. Using Bigflow, you can easily handle data of any scale. Bigflow processes 4P+ data inside Baidu and runs about 10k jobs every day.
C++
1,142
star
17

DuReader

Baseline Systems of DuReader Dataset
Python
1,133
star
18

DDParser

百度开源的依存句法分析系统
Python
973
star
19

starlight

Java implementation for Baidu RPC, multi-protocol & high performance RPC.
Java
961
star
20

CUP

CUP, common useful python-lib. (Currently, Most popular python lib in baidu). Python 开发底层库, 涵盖util、service(threadpool/generator/executor/cache等等)、logging、monitoring、增强型配置 等等库支持
Python
938
star
21

ICE-BA

C++
700
star
22

NoahV

An efficient front-end application framework based on vue.js
JavaScript
639
star
23

EasyFaaS

EasyFaaS是一个依赖轻、适配性强、资源占用少、无状态且高性能的函数计算服务引擎
Go
620
star
24

Curve

An Integrated Experimental Platform for time series data anomaly detection.
JavaScript
530
star
25

Jprotobuf-rpc-socket

Protobuf RPC是一种基于TCP协议的二进制RPC通信协议的Java实现
Java
516
star
26

bifromq

A MQTT broker implementation adopting serverless architecture
Java
514
star
27

fast_rgf

Multi-core implementation of Regularized Greedy Forest
C++
466
star
28

babylon

High-Performance C++ Fundamental Library
C++
457
star
29

Dialogue

Python
444
star
30

Elasticsearch

Baidu Elasticsearch
Java
432
star
31

brcc

BRCC(better remote config center)是一个分布式配置中心,用于统一管理应用服务的配置信息,避免各类资源散落在各个项目中,简化资源配置的维护成本。作为一种轻量级的解决方案,部署简单,同时支持多环境、多版本、多角色的资源管理,可以在不改变应用源码的情况下无缝切换和实时生效配置信息。
Java
390
star
32

Cafe

A powerful test framework for Android
Java
370
star
33

mix-img

A fast mix image javascript tool libary
JavaScript
332
star
34

puck

Puck is a high-performance ANN search engine
Jupyter Notebook
331
star
35

unit-dmkit

C++
327
star
36

galaxy

Galaxy is a cluster management system.
C++
326
star
37

information-extraction

Python
325
star
38

knowledge-driven-dialogue

baseline system of knowledge driven dialogue competition
Python
270
star
39

CarbonGraph

A Swift dependency injection / lookup framework for iOS
Swift
254
star
40

unit-uskit

unit-uskit
C++
251
star
41

BIPlatform

JavaScript
219
star
42

dlock

An effective and reliable Distributed Lock
Java
216
star
43

ins

iNexus, coordinate large scale services
C++
214
star
44

boteye

C++
212
star
45

titan-dex

Java
201
star
46

m-git

MGit 是一款基于 Git 的多仓库管理工具,可以安全的、高效的管理多个 Git 仓库; 适合于在多个仓库中进行关联开发的项目,实现批量的版本管理功能,提高 Git 操作的效率,避免逐个执行 Git 命令带来的误操作风险。
Ruby
166
star
47

Rubik

An Android platform component management tool chain, based on Kotlin language.
Kotlin
154
star
48

common

Common library
C++
132
star
49

go-lib

Go
126
star
50

titan-hotfix

Java
125
star
51

wx2

小程序互转工具
JavaScript
124
star
52

Youtube-8M

PaddlePaddle models for Youtube-8M Video Understanding Challenge
Python
114
star
53

ar-sdk

DuMix AR SDK for Developer
GLSL
107
star
54

broc

Python
101
star
55

ITEST

Web service interface test framework
97
star
56

ote-stack

OTE-Stack is an edge computing platform for 5G and AI
Go
96
star
57

GPT

Java
87
star
58

redis

Baidu Ksarch Redis - a production solution of redis cluster
87
star
59

san-devtools

Browser developer tools extension for debugging San.
TypeScript
82
star
60

terminator

Service Virtualization
Java
76
star
61

QCompute

QCompute is a Python-based quantum software development kit (SDK). It provides a full-stack programming experience for advanced users via hybrid quantum programming language features and a high-performance simulator.
Python
76
star
62

spring-cloud-baidu

70
star
63

shuttle

A fast computing framework based on Galaxy
C++
64
star
64

iot-edge-sdk-for-iot-parser

C
64
star
65

baidu-iot-samples

C
61
star
66

san-store

Application States Management for San
JavaScript
59
star
67

ARK

Development framework of intelligent operation
Python
57
star
68

san-update

Object immutable update utility for san solution
JavaScript
56
star
69

logcover

轻量级异常日志测试覆盖率度量工具
Python
56
star
70

palo

A fast MPP database for all modern analytics on big data. Powered by Apache Doris(Incubating)
50
star
71

speech-samples

百度语音示例
Java
48
star
72

ntripcaster

C
43
star
73

san-router

Official Router for San
JavaScript
38
star
74

Quanlse

Jupyter Notebook
38
star
75

san-ssr

San SSR framework and utils
TypeScript
37
star
76

dm-kit-php

PHP
36
star
77

boteye_sensor

C
35
star
78

ipipe-agent

Java
33
star
79

OASP

OASP (Online App Status Protocol)
Java
32
star
80

san-composition

JavaScript
30
star
81

duedge-recipes

DuEdge百度边缘网络计算样例代码
JavaScript
27
star
82

paddle-on-k8s-operator

Kubernetes operator for managing the lifecycle of PaddlePaddle job.
Go
24
star
83

baiducloud-sdk-go

Go SDK for Baidu Cloud
Go
24
star
84

san-website

JavaScript
21
star
85

baiduads-sdk

Baidu Ads API SDK
Python
19
star
86

du1906_esp

DUHOME AIOT platform based on du1906 and esp32
C
18
star
87

highflip

HIGHFLIP: An easy way to bridge different federal learning platforms
18
star
88

smartapp-openapi-java

百度智能小程序服务端 OpenAPI SDK for java,是基于小程序服务端 OpenAPI 封装的一套让开发者方便使用的 SDK, 它可以帮开发者减少理解和使用 OpenAPI 的成本, 减少开发者直接调用服务端接口不当而引起的错误, 避免在开发中走弯路。
Java
16
star
89

san-factory

JavaScript
15
star
90

ttm

C
14
star
91

cluster-api-provider-baiducloud

Kubernetes cluster-api for Baidu Cloud
Go
13
star
92

minions

Baidu 100G Chasiss Switch hardware spec
11
star
93

signet

签章系统
JavaScript
10
star
94

sgxray

SGXRay: a bounded verifier for Intel SGX enclaves
C
10
star
95

grafana-tsdb-datasource

JavaScript
9
star
96

iotcore-sdk-java

Java SDK for baidu IoT Core service
Java
9
star
97

bce-fpga-dev-kit

VHDL
8
star
98

iot

for all code about Internet of Things
8
star
99

smartapp-openapi-go

百度智能小程序服务端 OpenAPI SDK for go,是基于小程序服务端 OpenAPI 封装的一套让开发者方便使用的 SDK, 它可以帮开发者减少理解和使用 OpenAPI 的成本, 减少开发者直接调用服务端接口不当而引起的错误, 避免在开发中走弯路。
Go
8
star
100

duedge-cli

DuEdge Command Line
Python
6
star