1.OneNet
使用的教程
1.在网络上搜索onenet,注册并且登录账号。
2.产品服务-----物联网服务平台立即体验
3.在底下找到立即体验进去
4.产品开发------创建产品
5.关键是选择MQTT,其他的内容自己填写
6.这里产品以及开发完成,接下来就是添加设备了
7.进去之后点击添加设备
8.这里的关键点就是设备名称,后面写代码要用到,最好使用英文
9.点击详情就可以看具体的信息了
设备名称,产品密钥,产品ID都是后面要用到的。
10.点击产品开发
11.点击设置物理模型
12.点击
13.关键点:标识,数据类型,取值范围
标识符:后面代码传数据要用到
数据类型:选int32
取值范围:后面传递进来的要在这个范围,不然会传送失败
14.保存
2.openssl
1.openssl的安装
1.将opensll安装包复制到linux的目录下,减压
2. 进入openssl源码目录
输入./config enable-shared -fPIC #加入-fPIC 选项,不然,编译paho会出问题。
表示完成
3.make 这个过程需要等待下
4.sudo make install 安装
输入密码,等待安装完成
3.paho
1.将安装包复制到linux的目录下,减压
2.vim Makefile
编译修改如下:
1 .PC版本的编译步骤
1. openssl
2.paho 的编译
修改makefile
1.CC ?=gcc 122line
2.133 line 加入这两个选项
CFLAGS += -I /usr/local/ssl/include
LDFLAGS += -L /usr/local/ssl/lib
3.192line 注意-I,-L 后面填写ssl库的头文件目录和库文件目录 我这里是/usr/local/ssl/include 和
/usr/local/ssl/lib,如果你的不是,需要切换下
CCFLAGS_SO += -Wno-deprecated-declarations -DOSX -I /usr/local/ssl/include
LDFLAGS_C += -Wl,-install_name,lib$(MQTTLIB_C).so.${MAJOR_VERSION}
LDFLAGS_CS += -Wl,-install_name,lib$(MQTTLIB_CS).so.${MAJOR_VERSION} -L /usr/local/ssl/lib
LDFLAGS_A += -Wl,-install_name,lib${MQTTLIB_A}.so.${MAJOR_VERSION}
LDFLAGS_AS += -Wl,-install_name,lib${MQTTLIB_AS}.so.${MAJOR_VERSION} -L /usr/local/ssl/lib
FLAGS_EXE += -DOSX
FLAGS_EXES += -L /usr/local/ssl/lib4.make
quesion:
/usr/bin/ld: /usr/local/ssl/lib/libcrypto.a(x86_64cpuid.o): relocation R_X86_64_PC32 against symbol `OPENSSL_cpuid_setup' can not be used when making a shared object; recompile with -fPIC
初步分析,ssl编译的有问题,需要在编译的时候添加 ./config enable-shared/tmp/ccM0lsiB.o: relocation R_X86_64_PC32 against symbol `stdout@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC
检查paho库makefile 中是否加入-fPIC编译选项。
本makefile line:157 CCFLAGS_SO = -g -fPIC5. sudo make install /usr/local/lib /usr/local/include
最后:
install: cannot stat 'build/output/doc/MQTTClient/man/man3/MQTTClient.h.3': No such file or directory
Makefile:275: recipe for target 'install' failed
make: [install] Error 1 (ignored)
install -m 644 build/output/doc/MQTTAsync/man/man3/MQTTAsync.h.3 /usr/local/share/man/man3
install: cannot stat 'build/output/doc/MQTTAsync/man/man3/MQTTAsync.h.3': No such file or directory
Makefile:275: recipe for target 'install' faile
报这个错不用理会。到此就完成了编译。
pc 版mqtt库的安装。
2.arm版本:
arm-linux-gcc 配置
1.先按照之前方法配置
apt-get install lib32ncurses5 lib32z1(由于是64位系统,
arm-linux-gcc 是32位,需要安装这个库)
openssl arm 版本编译
1.
./config no-asm shared --prefix=$(pwd)/__install
no-asm: 是在交叉编译过程中不使用汇编代码代码加速编译过程,原因是它的汇编代码是对arm格式不支持的。
shared :生成动态连接库。
–prefix :指定make install后生成目录的路径,不修改此项则默认为OPENSSLDIR目录(/usr/local/ssl)
2.修改makefile
1) CC= gcc 改成 CC = arm-linux-gcc;(根据你自己的交叉编译环境设置,我的交叉编译环境是:arm-none-linux-gnueabi-)
2) 删除 CFLAG= 中的 “-march=pentium”;(如果有的话)3) AR=ar $(ARFLAGS) r 改为 AR=arm-none-linux-gnueabi-ar $(ARFLAGS) r;
4) ARD=ar $(ARFLAGS) d 改为 ARD=arm-none-linux-gnueabi-ar $(ARFLAGS) d;(如果有的话)
5)RANLIB= /usr/bin/ranlib 改为 RANLIB= arm-none-linux-gnueabi-ranlib;
3.makefile 中去掉
153 63 -m64 去掉4. make
5. make install
6.生成的arm库子当前目录下__install2. arm paho
https://blog.csdn.net/ltc844139730/article/details/52553086?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_v2~rank_aggregation-9-52553086.pc_agg_rank_aggregation&utm_term=arm%E7%A7%BB%E6%A4%8Dmqtt&spm=1000.2123.3001.4430
1.进入paho目录
2. 修改makefile 24行
.PHONY: clean, mkdir, install, uninstall, html,在这行的下面加入2行INCLUDES = -I/home/linux/code_test/mqtt_src/openssl-1.0.0s/__install/include
LIBSDIR = -L/home/linux/code_test/mqtt_src/openssl-1.0.0s/__install/lib
3.
然后到文件的第181行,在${CC} 后面加上$(INCLUDES),在最后加上$(LIBSDIR),生成的时候需要库,要把库的路径添加进去。${CC} $(INCLUDES) -g -o $@ $< -l${MQTTLIB_CS} ${FLAGS_EXES} $(LIBSDIR)
在第187行,203行,215行做同样处理。最好和我用一样的版本,一个是这个位置不对,另一个是我之前用的1.10版本的,这样子做没有效果。
需要多行加入。行号稍微有点差异。
3. make CC=arm-linux-gcc问题
报错:build/output/libpaho-mqtt3a.so: undefined reference to `clock_gettime'
修改makefile 最后 加入-lrt
FLAGS_EXES = $(LDFLAGS) -I ${srcdir} ${START_GROUP} -lpthread -lssl -lcrypto -lrt ${END_GROUP} -L ${blddir}
最后,bulid/output 下面就是 arm 版本的库了.在paho 目录下面有两个makefile ,后缀为arm,是arm版本的makefile 生成arm版本的库。
后缀名为PC的是生成PC版本的库,可以根据情况进行改名。
cp Makefile_arm makefile
cp Makefile_PC makefile
4.代码的修改
1.heda.h文件
主要修改以下三个内容
DEV_NAME:就是
PRODUCT_ID:
PASSWD:要使用onenet计算工具
点击Generate,产生的PASSWD赋值给PASSWD。
这里.h文件就修改完成了。
2.main.c
这里的num产生一个0-100范围内的数值,也就是前面设定的范围
tmp就是前面 onenet----13步骤 设定的标识符。