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/lib? ? ? ? 4.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 ?-fPIC? ? ? ? ?5. 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庫子當前目錄下__install? ? 2. 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步驟? ? 設定的標識符。