当前位置: 首页 > article >正文

OneNet + openssl + MTLL

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步骤    设定的标识符。

相关文章:

OneNet + openssl + MTLL

1.OneNet 使用的教程 1.在网络上搜索onenet&#xff0c;注册并且登录账号。 2.产品服务-----物联网服务平台立即体验 3.在底下找到立即体验进去 4.产品开发------创建产品 5.关键是选择MQTT&#xff0c;其他的内容自己填写 6.这里产品以及开发完成&#xff0c;接下来就是添加设…...

分享两个日常办公软件:uTools、PixPin

1. uTools 网址&#xff1a;https://u.tools/ 这是一个高效智能的在线工具平台。 特点&#xff1a; 专为提升用户的工作效率跟生活便利性设计。 优点&#xff1a; 1&#xff1a;由国内团队开发。 2&#xff1a;通过插件化的方式为用户提供多样化的功能支持。 3&#xf…...

Golang基础学习

​​​​​​​​​​ 初见golang语法 go项目路径 cd $GOPATH //ls可以看到有bin,pkg,src三个文件 cd src/ mkdir GolangStudy cd GolangStudy mkdir firstGolanggo程序执行: go run hello.go//如果想分两步执行: go build hello.go ./hello导入包的方式 import "f…...

[学习] GNSS信号跟踪环路原理、设计与仿真(仿真代码)

GNSS信号跟踪环路原理、设计与仿真 文章目录 GNSS信号跟踪环路原理、设计与仿真一、GNSS信号跟踪环路概述二、跟踪环路基本原理1. 信号跟踪的概念与目标2. 锁相环&#xff08;PLL&#xff09;原理3. 锁频环&#xff08;FLL&#xff09;原理4. 延迟锁定环&#xff08;DLL&#x…...

Python实例题:Python计算微积分

目录 Python实例题 题目 代码实现 实现原理 符号计算&#xff1a; 数值计算&#xff1a; 可视化功能&#xff1a; 关键代码解析 1. 导数计算 2. 积分计算 3. 微分方程求解 4. 函数图像绘制 使用说明 安装依赖&#xff1a; 基本用法&#xff1a; 示例输出&#…...

如何判断指针是否需要释放?

在 C 中判断一个指针是否需要释放可以考虑以下几个方面&#xff1a; 一、确定指针的来源 1. 动态分配的内存&#xff1a; 如果指针是通过new、new[]、malloc、calloc等动态内存分配函数获取的&#xff0c;那么在不再需要该内存时&#xff0c;必须手动释放。 例如&#xff1a…...

Spark 之 AQE

个人其他链接 AQE 执行顺序https://blog.csdn.net/zhixingheyi_tian/article/details/125112793 AQE 产生 AQE 的 循环触发点 src/main/scala/org/apache/spark/sql/execution/adaptive/AdaptiveSparkPlanExec.scala override def doExecute(): RDD[InternalRow] = {withFin…...

随访系统安装的记录

安装PG17.5 安装https://www.cnblogs.com/nulixuexipython/p/18040243 1、遇到navicat链接不了PG https://blog.csdn.net/sarsscofy/article/details/84985933 2、查看有无安装mysqlhttps://blog.51cto.com/u_16175430/7261412 3、 方案一&#xff1a;oracle不开日志 data…...

NLP学习路线图(二十四):门控循环单元(GRU)

一、背景:RNN的困境与门控机制的曙光 RNN的基本原理: RNN的核心思想是引入循环连接,使网络具有“记忆”功能。 在时刻 t,RNN接收当前输入 x_t 和前一个时刻的隐藏状态 h_{t-1}。 通过一个共享的权重参数(W, U, b)计算当前时刻的隐藏状态 h_t: h_t = tanh(W * x_t + U * …...

Doris查询Hive数据:实现高效跨数据源分析的实践指南

#### 1. Doris与Hive的集成背景 在大数据生态中&#xff0c;Hive作为基于Hadoop的数据仓库工具&#xff0c;广泛用于海量数据的批处理分析。而Apache Doris&#xff08;原百度 Palo&#xff09;是一种高性能、实时分析的MPP&#xff08;大规模并行处理&#xff09;数据库&…...

vsCode使用本地低版本node启动配置文件

npm run dev的配置文件 {"configurations": [{"type": "node-terminal","name": "项目运行: dev","request": "launch",//重点在这里 这行注释到时候删掉"command": "E:\\node-v14.21.…...

在Ubuntu上使用 dd 工具制作U盘启动盘

在Ubuntu上使用 dd 工具制作U盘启动盘 在Linux系统中&#xff0c;dd 是一个功能强大且原生支持的命令行工具&#xff0c;常用于复制文件和转换数据。它也可以用来将ISO镜像写入U盘&#xff0c;从而创建一个可启动的操作系统安装盘。虽然图形化工具&#xff08;如 Startup Disk…...

el-table表格增加序号列index vue2和vue3的写法

<el-table><!--每页从1开始的序号--><el-table-column label"序号" width"60" align"center" type"index" /><!--一直递增的序号 vue2写法--><el-table-column label"序号" width"60"…...

【学习记录】如何使用 Python 提取 PDF 文件中的内容

如何使用 Python 提取 PDF 文件中的内容 在文档自动化处理、数据提取和信息分析等任务中&#xff0c;从 PDF 文件中提取文本是一项常见需求。PDF 文件通常分为两种类型&#xff1a;基于文本的 PDF 和 包含扫描图像的 PDF。 本文将介绍如何使用 Python 分别提取这两种类型的 P…...

Spark 之 DataFrame 开发

foreachPartition val data = spark.sparkContext.parallelize(1 to 100)// 使用 foreachPartition 批量处理分区 data.foreachPartition {partitionIterator =...

嵌入式学习笔记 - freeRTOS xTaskResumeAll( )函数解析

第一部分 移除挂起等待列表中的任务 while( listLIST_IS_EMPTY( &xPendingReadyList ) pdFALSE )//循环寻找直到为空&#xff0c;把全部任务扫描一遍 { pxTCB ( TCB_t * ) listGET_OWNER_OF_HEAD_ENTRY( ( &xPendingR…...

机器学习KNN算法全解析:从原理到实战

大家好&#xff01;今天我们来聊聊机器学习中的"懒人算法"——KNN&#xff08;K-Nearest Neighbors&#xff0c;K近邻&#xff09;算法。这个算法就像个"墙头草"&#xff0c;它不学习模型参数&#xff0c;而是直接根据邻居的"投票"来做决策&…...

【QT】自定义QWidget标题栏,可拖拽(拖拽时窗体变为normal大小),可最小/大化、关闭(图文详情)

目录 0.背景 1.详细实现 思路简介 .h文件 .cpp文件 0.背景 Qt Linux&#xff1b;项目遇到问题&#xff0c;解决后特此记录 项目需要&#xff0c;个性化的标题栏&#xff08;是个widget&#xff09;&#xff0c;在传统的三个按钮&#xff08;最大化、最小化、关闭&#xf…...

FPGA定点和浮点数学运算-实例对比

在创建 RTL 示例时&#xff0c;经常使用 VHDL 2008 附带的 VHDL 包。它提供了出色的功能&#xff0c;可以高效地处理定点数&#xff0c;当然&#xff0c;它们也是可综合的。该包的一些优点包括&#xff1a; 有符号和无符号&#xff08;后缀和后缀&#xff09;定点向量。轻松将定…...

MySQL Binlog 数据恢复全指南

MySQL Binlog 数据恢复全指南 一、Binlog 核心概念 1. 什么是 Binlog&#xff1f; Binlog&#xff08;二进制日志&#xff09;是 MySQL 记录所有修改数据的 SQL 语句的日志文件&#xff0c;采用二进制格式存储。它是 MySQL 最重要的日志之一&#xff0c;具有三大核心功能&am…...

python版若依框架开发:后端开发规范

python版若依框架开发 从0起步,扬帆起航。 python版若依部署代码生成指南,迅速落地CURD!项目结构解析前端开发规范后端开发规范文章目录 python版若依框架开发1.启动命令2.配置⽂件3.上传配置1.启动命令 本项⽬⾃定义了两个启动命令 pyhton app.py --env=devpython app.p…...

Linux编程:2、进程基础知识

一、进程基本概念 1、进程与程序的区别 程序&#xff1a;静态的可执行文件&#xff08;如电脑中的vs2022安装程序&#xff09;。进程&#xff1a;程序的动态执行过程&#xff08;如启动后的vs2022实例&#xff09;&#xff0c;是操作系统分配资源的单位&#xff08;如 CPU 时…...

时序数据库IoTDB与EdgeX Foundry集成适配服务介绍

一、背景介绍 ‌EdgeX Foundry‌&#xff1a;由Linux基金会运维的开放源码边缘计算软件框架&#xff0c;自2017年开源后广泛应用于全球各行业场景。VMware自2018年起在中国社区推广EdgeX技术&#xff0c;拓展生态&#xff0c;并持续贡献代码。‌IoTDB‌&#xff1a;由Apache基…...

Android第十二次面试-多线程和字符串算法总结

多线程的创建与常见使用方法 ​一、多线程创建方式​ ​1. 继承Thread类​ class MyThread extends Thread {Overridepublic void run() {// 线程执行逻辑System.out.println(Thread.currentThread().getName() " is running");} }// 使用 MyThread thread new …...

ES6——数组扩展之Set数组

在ES6&#xff08;ECMAScript 2015&#xff09;中&#xff0c;JavaScript的Set对象提供了一种存储任何值唯一性的方式&#xff0c;类似于数组但又不需要索引访问。这对于需要确保元素唯一性的场景非常有用。Set对象本身并不直接提供数组那样的方法来操作数据&#xff08;例如ma…...

Cursor Rules 使用

前言 最近在使用 Cursor 进行编程辅助时&#xff0c;发现 AI 生成的代码风格和当前的代码风格大相径庭。而且有时它会输出很奇怪的代码&#xff0c;总是不符合预期。 遂引出本篇&#xff0c;介绍一下 Rules &#xff0c;它就可以做一些规范约束之类的事情。 什么是 Cursor R…...

服务器数据恢复—服务器raid5阵列崩溃如何恢复数据?

服务器数据恢复环境&故障&#xff1a; 某品牌型号为X3850服务器上有一组由14块数据盘和1块热备盘组建的raid5磁盘阵列。 服务器在正常使用过程中突然崩溃&#xff0c;管理员查看raid5阵列故障情况的时发现磁盘阵列中有2块硬盘掉线&#xff0c;但是热备盘没有启用。 服务器数…...

Go语言堆内存管理

Go堆内存管理 1. Go内存模型层级结构 Golang内存管理模型与TCMalloc的设计极其相似。基本轮廓和概念也几乎相同&#xff0c;只是一些规则和流程存在差异。 2. Go内存管理的基本概念 Go内存管理的许多概念在TCMalloc中已经有了&#xff0c;含义是相同的&#xff0c;只是名字有…...

【DAY41】简单CNN

内容来自浙大疏锦行python打卡训练营 浙大疏锦行 知识点&#xff1a; 数据增强卷积神经网络定义的写法batch归一化&#xff1a;调整一个批次的分布&#xff0c;常用与图像数据特征图&#xff1a;只有卷积操作输出的才叫特征图调度器&#xff1a;直接修改基础学习率 卷积操作常…...

Rust 学习笔记:使用自定义命令扩展 Cargo

Rust 学习笔记&#xff1a;使用自定义命令扩展 Cargo Rust 学习笔记&#xff1a;使用自定义命令扩展 Cargo Rust 学习笔记&#xff1a;使用自定义命令扩展 Cargo Cargo 支持通过 $PATH 中的 cargo-something 形式的二进制文件拓展子命令&#xff0c;而无需修改 Cargo 本身。 …...