建筑物联网系统(linux系统怎么联网)

Mark wiens

发布时间:2022-11-12

建筑物联网系统(linux系统怎么联网)

 

大家好,我是杂烩君。

最近,我们的设备连接的云平台需要切到阿里的飞燕平台,做个笔记记录下。

阿里的物联网平台有好几个:

物联网平台生活物联网平台(飞燕平台)城市物联网平台

它们的应用场景不一样。其中,物联网平台的入口是最容易找到的,网上大多数demo都是基于物联网平台。而本篇笔记我们是基于生活物联网平台(飞燕平台)来记录的。

阿里的生活物联网平台是面向消费级生活智能设备的平台。

平台入口:

https://www.aliyun.com/product/livinglink?spm=5176.13907935.J_3207526240.46.56603cc7M41In4

开发文档:

https://help.aliyun.com/document_detail/142147.html?spm=5176.20184507.J_1419255180.2.4c111d2e2IUsMC

下面我们使用基于嵌入式Linux单板系统的设备一步一步地连接飞燕平台。

一、云端创建产品

1、功能定义

定义一些属性:

2、人机交互

配置APP的,后面我们可以使用公版APP进行测试。

3、设备调试/添加设备

4、产品发布

5、获取设备SDK

飞燕平台的设备SDK需要发邮件进行获取,具体获取方式可查看文档。获取得到:

二、移植sdk库至板子

可以参照文档《无AliOS Things的SDK适配指南》来交叉编译libiot_sdk.a库。

https://help.aliyun.com/document_detail/178333.htm?spm=a2c4g.11186623.0.0.1b046fdbIkFmITtask-1935127

互联网小常识:电子邮件系统使用的协议主要有:简单邮件传送协议(SMTP,端口25);邮局协议第三版(POP3,端口110);Internet消息访问协议版本4(IMAP4,端口143),可以用telnet IP port的方法测试服务是否正常。

1、配置交叉编译器。

(1)修改文件build-rules/settings.mk中的TOOLCHAIN_DLDIR,比如我这里修改为:

(2)修改build-rules/funcs.mk里面的函数Relative_TcPath增加编译器的相对路径,比如我这里修改为:

(3)增加我们板子的config文件。在src/board/目录下增加一个新的config配置文件,里面的内容可以参照已有的配置文件,比如我参照的是config.ubuntu.x86来新增我的板子的配置文件config.linux.rv1126:

CONFIG_ENV_CFLAGS+= \ -Os -Wall \ -g3 --coverage \ -D_PLATFORM_IS_LINUX_ \ -D__UBUNTU_SDK_DEMO__ \CONFIG_ENV_CFLAGS+= \ -DWITH_MQTT_DYN_BUF=1 \ -DWITH_MEM_STATS=0 \ -DWITH_MEM_STATS_PER_MODULE=0 \ -DWITH_MQTT_JSON_FLOW=1 \ -DWITH_MQTT_ZIP_TOPIC=1 \ -DWITH_MQTT_SUB_SHORTCUT=1CONFIG_ENV_CFLAGS+= \ -DCONFIG_HTTP_AUTH_TIMEOUT=10000 \ -DCONFIG_MID_HTTP_TIMEOUT=10000 \ -DCONFIG_GUIDER_AUTH_TIMEOUT=10000 \ -DCONFIG_MQTT_RX_MAXLEN=10000 \ -DCONFIG_MBEDTLS_DEBUG_LEVEL=0 \ -DCOMPATIBLE_LK_KVifneq(Darwin,$(strip $(shell uname)))CONFIG_ENV_CFLAGS+= -rdynamicCONFIG_ENV_CFLAGS+= -WerrorCONFIG_ENV_CFLAGS+= -Wno-missing-braceselseCONFIG_src/ref-impl/hal:=CONFIG_examples:=CONFIG_src/tools/linkkit_tsl_convert:=endifCONFIG_src/ref-impl/tls:=CONFIG_src/ref-impl/hal:=CONFIG_ENV_LDFLAGS+= -lpthread -lrt交叉编译器的前缀,这里不要带路径CROSS_PREFIX:= arm-linux-gnueabihf-

2、配置SDK的功能

我们可以直接编辑根目录下面的make.settings文件,也可以执行make menuconfig命令进行图形化配置,比如配置配网的方式等,这里我使用设备AP配网,所以我使能设备AP配网:

嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!

无偿分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。

点击这里找小助理0元领取:点击文中蓝色字体领取吖

互联网小常识:在一般规模的网络系统中,尤其是一期工程的建设中,人们经常采用多个并行的GE/10GE交换机堆叠的方式来扩展端口密度,由一台交换机通过光端口向上级联,将汇聚层与接入层合并成一层。

3、编译libiot_sdk.a库

先执行make clean命令进行清理操作,再执行make reconfig选择配置。

刚才我们添加的板子处于序号3的配置,输入3,然后回车:

然后执行make命令进行编译,编译无误的结果:

如果没有编译错误,生成的库文件libiot_sdk.a在output/release/lib目录下面。

4、交叉编译demo工程

我们准备一个工程,然后把sdk里的必要文件到我们的工程里,比如我这里新建一个ali_smartliving文件夹存放sdk相关的代码,ali_smartliving里面的内容如:

其中include及src文件夹就是sdk里对应的文件夹,lib里放的是我们上面交叉编译得到的libiot_sdk.a。

把sdk开发包examples/linkkit/living_platform的整个文件夹复制到我们的工程里,然后编写CMakeLists.txt文件:

cmake_minimum_required(VERSION 3.1) message(STATUS"") message(STATUS"Build on target platform:${TARGET_PLATFORM}") message(STATUS"")编译模式设置set(DEBUG_VERSION"DebugMode")set(RELEASE_VERSION"ReleaseMode")set(COMPILE_MODE${RELEASE_VERSION})编译模式set(TARGET_NAME"ali_sdk_test")目标可执行程序名称string(TIMESTAMP COMPILE_TIME %m%d_%H%M)生成编译时间Debug模式(目标:工程名+编译时间)if(${COMPILE_MODE}MATCHES${DEBUG_VERSION}) message(STATUS"Compile mode:${COMPILE_MODE}")set(USE_RELEASE_MODE 0)set(CMAKE_BUILD_TYPE"Debug")set(target${TARGET_NAME}_${COMPILE_TIME})Release模式(目标:工程名+版本号)else() message(STATUS"Compile mode:${COMPILE_MODE}")set(USE_RELEASE_MODE 1)set(CMAKE_BUILD_TYPE"Release")set(VERSION_MAJOR 1)一级版本号set(VERSION_MINOR 0)二级版本号set(VERSION_LEVEL3 0)三级版本号set(target${TARGET_NAME}_V${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_LEVEL3}) endif() project(${target})编译选项配置set(TARGET_PLATFORM"x86-64"CACHE STRING"which platform the source code should be compiled on") message(STATUS"Build on target platform:${TARGET_PLATFORM}")if(TARGET_PLATFORM MATCHES"rv1126") include(cmake/rv1126_crosscompile_toolchain.cmake)交叉编译环境设置elseif(TARGET_PALTFORM MATCHES"x86-64") message(STATUS"PC_DEBUG:${PC_DEBUG}") endif()set(CMAKE_CXX_FLAGS"-std=c++11")set(CMAKE_CXX_FLAGS_RELEASE"-O3 -Wall")-g for debugset(CMAKE_CXX_FLAGS_DEBUG"$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")set(CMAKE_EXE_LINKER_FLAGS"-Wl,-Map=out.map")if(TARGET_PLATFORM MATCHES"rv1126")set(CMAKE_C_FLAGS"-fdata-sections -g -rdynamic -mapcs-frame -funwind-tables -ffunction-sections -Wall -Os")set(CMAKE_C_FLAGS"$ENV{CMAKE_C_FLAGS} -DDLL_HAL_EXPORTS -DCOMPATIBLE_LK_KV -lrt") elseif(TARGET_PALTFORM MATCHES"x86-64")set(CMAKE_C_FLAGS"-fdata-sections -g -rdynamic -mapcs-frame -funwind-tables -ffunction-sections -Wall -Os")set(CMAKE_C_FLAGS"$ENV{CMAKE_C_FLAGS} -DDLL_HAL_EXPORTS -DCOMPATIBLE_LK_KV -lrt") endif()set(CMAKE_CXX_FLAGS"-fdata-sections -Wno-psabi")共享库set(ALI_IOT_LIBDIR ali_smartliving/lib) link_directories(${ALI_IOT_LIBDIR})set(ALI_IOT_LIBS libiot_sdk.a) add_definitions (-DDLL_IOT_EXPORTS) add_definitions (-DAWSS_DISABLE_ENROLLEE) add_definitions (-DAWSS_DISABLE_REGISTRAR) add_definitions (-DAWSS_SUPPORT_ADHA) add_definitions (-DAWSS_SUPPORT_AHA) add_definitions (-DAWSS_SUPPORT_APLIST) add_definitions (-DAWSS_SUPPORT_DEV_AP) add_definitions (-DAWSS_SUPPORT_PHONEASAP) add_definitions (-DAWSS_SUPPORT_ROUTER) add_definitions (-DAWSS_SUPPORT_SMARTCONFIG) add_definitions (-DAWSS_SUPPORT_SMARTCONFIG_WPS) add_definitions (-DAWSS_SUPPORT_ZEROCONFIG) add_definitions (-DCOAP_SERV_MULTITHREAD) add_definitions (-DCONFIG_HTTP_AUTH_TIMEOUT=5000) add_definitions (-DCONFIG_MID_HTTP_TIMEOUT=5000) add_definitions (-DCONFIG_GUIDER_AUTH_TIMEOUT=10000) add_definitions (-DDEVICE_MODEL_ENABLED) add_definitions (-DDEV_BIND_ENABLED) add_definitions (-DFORCE_SSL_VERIFY) add_definitions (-DMQTT_COMM_ENABLED) add_definitions (-DMQTT_DIRECT) add_definitions (-DOTA_ENABLED) add_definitions (-DOTA_SIGNAL_CHANNEL=1) add_definitions (-DSUPPORT_TLS) add_definitions (-DWIFI_PROVISION_ENABLED) add_definitions (-D_PLATFORM_IS_HOST_) include_directories(build) include_directories(ali_smartliving) include_directories(ali_smartliving/include) include_directories(ali_smartliving/include/exports) include_directories(ali_smartliving/include/imports) include_directories(ali_smartliving/linkkit/living_platform) include_directories(ali_smartliving/src/ref-impl/hal) include_directories(ali_smartliving/src/ref-impl/hal/os/ubuntu) include_directories(ali_smartliving/src/infra/log) include_directories(ali_smartliving/src/ref-impl/tls/include) include_directories(ali_smartliving/src/infra/utils/digest) include_directories(living_platform)源文件aux_source_directory(living_platform living_platform_src) file(GLOB hal_srcs${PROJECT_SOURCE_DIR}/ali_smartliving/src/ref-impl/hal/os/ubuntu/*.c) file(GLOB ssl_mbedtls_srcs${PROJECT_SOURCE_DIR}/ali_smartliving/src/ref-impl/hal/ssl/mbedtls/*.c) file(GLOB tls_srcs${PROJECT_SOURCE_DIR}/ali_smartliving/src/ref-impl/tls/library/*.c)set(THREADS_PREFER_PTHREAD_FLAG ON) find_package(Threads REQUIRED) message(STATUS" Compile time:${COMPILE_TIME}") add_executable(${PROJECT_NAME}${living_platform_src}${hal_srcs}${ssl_mbedtls_srcs}${tls_srcs}main.c ) target_link_libraries(${PROJECT_NAME}${ALI_IOT_LIBS}Threads::Threads m )

我们工程的结构如:

我们的demo工程在文末回复具体的关键词可以获取。

注意:

大家自己移植、编译,可能会遇到如下两个问题:

(1)很多系统函数找不到,加上编译参数-lrt即可。

(2)softap_decrypt_password函数找不到。这个函数是在libawss_security.a库里的,而这个库我们并没有交叉编译,demo的文档也有提到:

这里我们暂时用不到,也可以屏蔽掉sdk里调用这个函数的地方,如:

到了这一步,工程编译基本没什么问题了。下面开始连接云端

5、设备连接云端

先来测试设备连接云端,需要在代码里写入云端的设备证书。

云端设备证书:

代码里需要修改living_platform_ut.h文件里的如下宏定义:

修改的时候需要去掉PK_ 、PS_ 、 DN_ 、DS_ 这些前缀。

修改如:

运行测试,没报什么错的话,云端设备就会显示在线:

可以在线调试设备:

文章链接:https://mp.weixin.qq.com/s/QWHLMBsFV6GYPTfxhiwEvQ

转载自:ZhengNL 嵌入式大杂烩

文章来源:嵌入式Linux单板连接飞燕物联网平台

版权申明:本文来源于网络,免费传达知识,版权归原作者所有。如涉及作品版权问题,请联系我进行删除。

互联网小常识:第一次配置无线接入点,一般采用本地配置方式,即无需将无线接入点连接到一个有线的网络中。这时,因为没有连接到DHCP服务器而无法获得IP地址,它的默认IP地址是10.0.0.1并成为小型的DHCP服务器。在这种情况下,接入点可以为下列这些设备分配多达20个10.0.0.x范围的IP地址。(1)连接在连接点以太网端口上的PC机(2)没有配置SSID或SSID配置为tsunami,并且关闭所有安全配置的无线设备。

免责声明:本站所有信息均搜集自互联网,并不代表本站观点,本站不对其真实合法性负责。如有信息侵犯了您的权益,请告知,本站将立刻处理。联系QQ:1640731186