- 博客(45)
- 收藏
- 关注
原创 Modbus学习记录(3)
Modbus学习记录(3)——API详解modbus_new_rtu()modbus_new_tcp()modbus_tcp_listen()modbus_tcp_accept()modbus_new_tcp_pi()modbus_free()modbus_set_slave()modbus_set_debug()modbus_connect()modbus_close()modbus_flush()modbus_read_bits()modbus_read_input_bits()modbus_read_
2022-03-15 14:33:13 9072 1
转载 Modbus学习记录(2)
Modbus学习记录(2)——报文格式分析三种通讯方式的报文格式以太网(modbus tcp/ip)modbus tcp/ip通信方式通信过程异步串行传输的两种传输方式(modbus RTU和modbus ASCII)Modbus的四种数据类型数据解析三种通讯方式的报文格式 Modbus协议的报文(或帧)的基本格式是:表头 + 功能码 + 数据区 + 校验码 功能码和数据区在不同类型的网络都是固定不变的,表头和校验码则因网络底层的实现方式不同而有所区别。表头包含了从站的地址,功能码告诉从站要执行
2022-03-15 10:18:39 1586
转载 Modbus学习记录(1)
Modbus学习记录(1)——Modbus简介1、Modbus 协议简介2、Modbus 通讯方式2.1、Modbus三种通讯方式2.2、在Modbus网络上传输2.3、在其它类型网络上转输2.4、查询---回应本文转载至https://www.cnblogs.com/The-explosion/p/11512677.html1、Modbus 协议简介 Modbus协议是一种已广泛应用于当今工业控制领域的通用通讯协议。通过此协议,控制器相互之间、或控制器经由网络(如以太网)可以和其它设备之间进行通信
2022-03-15 09:37:40 1764
原创 MQTT学习记录(5)
MQTT学习记录(5)mosquitto实现客户端可发布可订阅模式例程:程序编写思路客户端一:客户端二:运行结果mosquitto实现客户端可发布可订阅模式例程:通过学习了各种mosquitto函数API后,完成一个可发布可订阅模式的客户端代码编写。程序编写思路libmosquitto 库初始化mosquitto_lib_init();创建mosquitto客户端mosq = mosquitto_new(NULL,session,NULL);设置回调函数,需要时可使用mosquitto_lo
2022-03-07 14:41:18 806 1
原创 MQTT学习记录(4)
MQTT学习记录(4)常用API详解mosquitto_lib_initmosquitto_lib_cleanupmosquitto_newmosquitto_destroymosquitto_connect_callback_setmosquitto_disconnect_callback_setmosquitto_message_callback_setmosquitto_subscribe_callback_setmosquitto_username_pw_setmosquitto_connectmo
2022-03-07 14:07:22 1358
转载 MQTT学习笔记(3)
MQTT学习笔记(3)MQTT协议数据包结构固定报头MQTT固定报头第1字节MQTT固定报头第2字节可变报头有效荷载MQTT协议数据包结构在MQTT协议中,一个MQTT数据包由:固定头(Fixed header)、可变头(Variable header)、消息体(payload)三部分构成。MQTT数据包结构如下:固定头(Fixed header)。存在于所有MQTT数据包中,表示数据包类型及数据包的分组类标识。可变头(Variable header)。存在于部分MQTT数据包中,数据包类型决定了
2022-03-07 11:38:03 732
原创 MQTT学习记录(2)
MQTT学习记录(2)Ubuntu16.04安装mosquitto库apt-get安装手动安装mosquitto-1.5.5.tar.gzmosquitto源码目录结构介绍Ubuntu16.04安装mosquitto库apt-get安装引入mosquitto仓库并更新$sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa$sudo apt-get update执行以下命令安装mosquitto包$sudo apt-get in
2022-03-07 11:14:34 314
原创 MQTT学习记录(1)
MQTT学习记录(1)MQTT简介发布/订阅模式简介常用术语MQTT客户端MQTT服务器MQTT协议中的方法MQTT简介MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物
2022-03-07 10:51:26 723
转载 VMware虚拟机内安装的Ubuntu 16.04设置静态IP地址NAT方式
1.安装环境VMware 12Ubuntu 16.04 x86_642.在VMware中,配置网络环境VMware在默认安装完成之后,会创建三个虚拟的网络环境:VMnet0、VMnet1和VMnet8。其类型分别为:桥接网络,Host-only和NAT。其中,NAT表示VMWware内安装的Ubuntu将会在一个子网中,VMware通过网络地址转换,通过物理机的IP上网。这里,我们选择NAT方式,来实现Ubuntu的静态IP地址配置。打开VMware,在顶部依次选择:编辑 > 虚拟网路编辑
2022-03-03 16:47:59 751
原创 Libevent学习记录(5)
Libevent学习记录(5)TCP服务端和客户端开发基本流程服务端开发流程客户端开发流程服务端代码:客户端代码运行结果TCP服务端和客户端开发基本流程本节通过学习TCP服务端和客户端开发基本流程,对libevent库官方sample进行改写,完成一个小项目,功能:server启动后,client端启动并连接,在client中输入文字,server端收到后打印出来,并给client反馈一条信息表示已经收到。服务端开发流程1、创建event_base_new()创建框架上下文对象event base
2022-03-02 14:56:03 2552
转载 Libevent学习记录(4)
Libevent学习记录(4)Libevent常用API:三、监听器evconnlistener相关API1、evconnlistener_new_bind2、evconnlistener_cb监听回调函数原型:四、evBuffer介绍1、struct evbuffer* 变量的赋值2种方式2、与evbuffer相关的常用函数API五、数据缓冲bufferevent相关API1、创建基于套接字的bufferevent:bufferevent_socket_new2、释放bufferevent:buffere
2022-03-01 16:58:00 649
原创 Libevent学习记录(3)
Libevent学习记录(3)Libevent事件相关常用API:一、事件集event_base相关API1、创建事件根基event_base_new2、释放事件根基event_base_free3、事件循环event_base_dispatch、event_base_loop4、终止事件循环event_base_loopexit、event_base_loopbreak5、转储event_base的状态event_base_dump_events二、事件event相关API事件状态转换图:event的使用
2022-03-01 14:58:48 1936
原创 Libevent学习记录(2)
Libevent学习记录(2)Libevent官方例程hello-world代码分析注释源码:整体框架相关说明:event_baseevconnlistenerbuffereventevsignalLibevent官方例程hello-world代码分析通过libevent提供的Hello_World demo简单学习基于libevent的TCP服务器的实现。注释源码:以下注释均为自己学习的时候进行的注释,有错的欢迎指出/* This example program provides a tri
2022-03-01 11:26:48 715
原创 Libevent学习记录(1)
LibeventLibevent 是一个用C语言编写的、轻量级的开源高性能事件通知库,主要有以下几个亮点: 事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大; 源代码相当精炼、易读; 跨平台,支持 Windows、 Linux、 *BSD 和 Mac Os;支持多种 I/O 多路复用技术, epoll、 poll、 dev/poll、 select 和 kqueue 等; 支持 I/O,定时器和信号等事件;注册事件优先级。简介 libev
2022-03-01 10:12:11 306
转载 Select机制
Select机制select工作机制1、select的睡眠过程2、select的唤醒3、select函数参数说明maxfds:readfds:writefds:exceptfds:timeout:返回值:4、文件描述符集合fd_set的相关操作:select工作机制 poll和select,都是基于内核函数sys_poll实现的,不同在于在linux中select是从BSD Unix系统继承而来,poll则是从SYSTEM V Unix系统继承而来,因此两种方式相差不大。poll函数没有最大文件描述符
2021-11-22 14:24:22 1589
原创 DHT11温湿度传感器开发
DHT11温湿度传感器开发单总线说明单总线传送数据位定义数据格式数据时序图外设读取步骤单总线说明 DHT11 器件采用简化的单总线通信。单总线即只有一根数据线,系统中的数据交换、控制均由单总线完成。设备(主机或从机)通过一个漏枀开路或三态端口连至该数据线,以允许设备在不发送数据时能够释放总线,而让其它设备使用总线;单总线通常要求外接一个约 5.1kΩ 的上拉电阻,这样,当总线闲置时,其状态为高电平。由于它们是主从结极,只有主机呼叫从机时,从机才能应答,因此主机访问器件都必须严格遵循单总线序列,如果出现
2021-11-22 14:17:02 4806 1
转载 Linux makefile基本认知
Linux makefile基本认知概述关于程序的编译和链接Makefile 介绍一、Makefile的规则二、一个示例三、make是如何工作的四、makefile中使用变量五、让make自动推导六、另类风格的makefile七、清空目标文件的规则概述什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成
2021-09-20 14:01:38 172
转载 Linux文件系统与目录结构
Linux文件系统与目录结构1.文件系统结构2.Linux下的文件类型3.文件名规则4.绝对路径与相对路径在Linux系统中,目录被组织成一个:单根倒置树结构,文件系统从根目录开始,用/来表示。文件名称区分大小写( 大小写敏感还需要看具体的文件系统格式 ),以.开头的为隐藏文件,路径用/来进行分割(windows中使用\来分割),文件有两个种类:元数据与数据本身.在操作linux系统时,通常会遵循以下的分层结构规则:LSB (Linux Standard Base) / FHS(Filesystem
2021-08-13 17:56:59 315
原创 文件系统认知
文件系统认知什么是文件系统文件系统(文件管理系统的方法)的种类有哪些什么是分区什么虚拟文件系统VFS什么是文件系统 文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法;文件系统(文件管理系统的方法)的种类有哪些常规的文件系统有:FAT、 VFAT、 NTFS 、EXT1/2/3/4 、HFS等,具体的说明可以百度Linux中查看文件系统的指令:df -T Linux系统核心可以支持十多种文件系
2021-08-13 17:46:24 168
原创 带wiringPi库的交叉编译如何进行
带wiringPi库的交叉编译如何进行直接下载wiringpi库到Ubuntu Linux上进行安装使用会出错:解决方法:把树莓派中的wringPI库拿上来用:Linux创建连接命令 ln -s创建软连接软链接:硬链接:直接下载wiringpi库到Ubuntu Linux上进行安装使用会出错:正常情况下,我们先要交叉编译wiringPi库,编译出的库要能适合树莓派,然后去交叉编译生成可执行程序的时候,链接库的格式才是正确的。但是因为我生成的wiringPi的链接库的格式不对,他是宿主机(X86)的平台
2021-08-12 15:47:31 569
原创 Linux库相关概念
Linux库相关概念介绍Linux中命名系统中共享库的规则静态库优点:缺点:静态库的制作静态库的使用动态库优点:缺点:动态库的制作动态库的使用介绍库是什么?库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。就是将源代码转化为二进制格式的源代码,相当于进行了加密,别人可以使用库,但是看不到库中的内容。使用GNU的工具我们如何在Linux下创建自己的程序函数库?一个“程序函数库”简单的说就是一个文件包含了一些编译好的代码和数据,这些编译好的代码和数据可以在事后供其他的程序使用。程序函数库可以使
2021-08-10 15:41:38 253
转载 判断一个system函数调用shell脚本是否正常结束
判断一个system函数调用shell脚本是否正常结束system函数对返回值的处理,涉及3个阶段:阶段1:创建子进程等准备工作。如果失败,返回-1。阶段2:调用/bin/sh拉起shell脚本,如果拉起失败或者shell未正常执行结束(参见备注1),原因值被写入到status的低8~15比特位中。system的man中只说明了会写了127这个值,但实测发现还会写126等值。阶段3:如果shell脚本正常执行结束,将shell返回值填到status的低8~15比特位中。备注1:只要能够调用到/b
2021-08-09 16:28:37 928
原创 字节序相关概念
字节序字节序是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序。主机字节序就是我们平常说的大端和小端模式:不同的CPU有不同的字节序类型,这些字节序是指整数在内存中保存的顺序,这个叫做主机序。引用标准的Big-Endian和Little-Endian(大小端)的定义如下:a) Little-Endian(小端模式)就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。如0x04030201这个数据按小段模式存放在2000——2003这一段地址中存放的顺序是: 2003 存放
2021-08-05 17:26:24 891
原创 Linux socket编程
Linux socket编程socket编程步骤各API参数说明socket()bind()listen()、connect()accept()数据传输函数学习例程socket编程步骤通过下面这张图可以很清晰的看出我们在通过socket套接字进行TCP网络编程时需要进行两个方面的代码的编写:服务器:1、创建套接字:socket()2、绑定端口:bind()3、监听:listen()4、等待客户端连接:accept()5、数据传输:各种文件的读写操作函数,个人习惯read/write客户端:
2021-08-05 17:04:00 241
原创 linux中的权限说明
Linux 系统中采用三位十进制数表示权限,如0755, 0644.ABCDA- 0, 表示十进制B-用户C-组用户D-其他用户— -> 0 (no excute , no write ,no read)–x -> 1 excute, (no write, no read)-w- -> 2 write-wx -> 3 write, excuter-- -> 4 readr-x -> 5 read, excuter
2021-08-03 14:51:15 364
原创 Linux中fork+exec、system和popen的区别
fork+exec、system和popenfork+execsystempopenfork+exec 我们用fork函数创建新进程后,经常会在新进程中调用exec函数去执行另外一个程序(比如在我们写程序时需要使用我们之前的写过的某个程序的功能,通过该方式直接去调用一个可执行程序可以大大的简化我们的程序)。当进程调用exec函数时,该进程被完全替换为新程序。因为调用exec函数并不创建新进程,所以前后进程的ID并没有改变。 父进程通过fork()的方式产生一个一模一样的子进程,创建出来的子进程再以
2021-08-02 15:09:37 890
原创 解决树莓派程序中的中文乱码问题
当我们在使用树莓派的时候,有时候需要将外部的程序放到树莓派中运行,而当我们的程序中含有中文是,一般在树莓派下会变成乱码,这时候我们要将树莓派中的乱码进行修改,但是相信大家会遇到一个问题:就是明明我们将树莓派中的乱码改成中文了,但是不能保存退出,它会提示你没有进行任何修改,这里就要注意了,不能直接输入::wq我们要在保存时指定编码方式后在退出,即::w ++enc=utf-8保存后再输入:q退出即可,再次打开程序就可以看见乱码部分已经被修改了。...
2021-06-13 12:57:12 2383
原创 树莓派通过HTTP/HTTPS协议访问翔云平台
树莓派通过HTTP/HTTPS协议访问翔云平台树莓派环境搭建openssl库的编译1、获取openssl安装压缩包2、进行openssl压缩包的解压3、编译步骤2、libcurl库编译代码运行代码编译翔云平台是一个专业的智能识别AP研发团队,可提供证件、发票、车牌、VIN等OCR API服务支持 Windows、 Linux主流服务器系统,我是通过该平台进行人脸识别的程序开发。树莓派环境搭建由于之前在Linux中已经进行过有关libcurl库的搭建,Linux中libcurl库的编译.但是之前进行单独
2021-06-07 16:48:35 942 2
原创 Linux中libcurl库编译安装
Linux中libcurl库编译安装环境搭建libcurl库编译解压文件安装文件环境搭建要进行平台的访问,必须先对树莓派环境搭建,这里主要报告libcurl库的编译,openssl库的编译。libcurl库编译首先通过官网进行库下载(https://github.com/curl/curl/releases/tag/curl-7_71_)解压文件tar –xvf file.tar //解压 tar包tar -xzvf file.tar.gz //解压tar.gztar -xjvf file.
2021-06-07 16:13:33 834
原创 树莓派实现摄像头拍照
树莓派实现摄像头拍照1、准备好摄像头模块,提前安装在树莓派上(插在对应位置即可);2、插上树莓派的电源并登录(ssh方式),打开树莓派的命令行窗口:3、拍照1、准备好摄像头模块,提前安装在树莓派上(插在对应位置即可);2、插上树莓派的电源并登录(ssh方式),打开树莓派的命令行窗口:输入以下指令进入树莓派的系统配置:sudo raspi-config会显示如图所示的界面:选择5 Interfacing Options;进入之后选择P1 Camera,然后在 Would you like th
2021-06-07 13:32:47 4251 1
转载 Http协议之libcurl库实现
Http协议之libcurl库实现libcurl简介libcurl的使用函数简介1、CURLcode curl_global_init();2、void curl_global_cleanup(void);3、CURL *curl_easy_init( );4、void curl_easy_cleanup(CURL *handle);5、CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter);6、CURLcode curl_
2021-06-06 20:40:52 702
转载 linux 下 gcc编译程序时,-I(大写i) 与-L(大写l)-l(小写l) 的作用
-I(大写i)include头文件非标准库中存在的不是在当前路径文件夹下的,需要将地址用-I(大写)指定如:gcc test.c -I /home/hello/include -L(大写l)放在/lib和/usr/lib和/usr/local/lib里的库直接用-l参数就能链接了,但如果库文件没放在这三个目录里,而是放在其他目录里,这时我们只用-l参数的话,链接还是会出错,出错信息大概是:“/usr/bin/ld: cannot find -lxxx”,也就是链接程序ld在那3个目录里找不到l
2021-06-04 16:36:17 676
转载 Socket、TCP、HTTP介绍
Socket、TCP、HTTP介绍OSI模型TCP/IP连接SOCKET原理套接字(socket)概念HTTP连接三者之间的区别socket连接与TCP/IP连接Socket连接与HTTP连接TCP/IP协议和HTTP协议OSI模型 七层模型,亦称OSI(Open System Interconnection)。参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系,一般称为OSI参考模型或七层模型。下面的图表试图显示不同的TCP/IP和其他的协议在最初OSI模型中的位置:
2021-05-27 16:18:23 403
转载 TCP三次握手、四次挥手
socket、tcp、http介绍TCP/IP协议TCP有两种传输模式:三次握手:握手过程:为何需要三次握手:四次挥手挥手工程常见面试题TCP/IP协议 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。TCP有两种传输模式:TCP面向有连接,传输可靠,常用于点对点传输如微信UDP面向无连接,传输高速,常用于点对面传输如直播三次握手:建立起一个TCP连接需要经过
2021-05-27 15:18:28 101
原创 C语言在LINUX中实现贪吃蛇代码
代码是在进行C语言课程学习的一个小作业,用到链表,结构体,函数的C语言知识,涉及到一定的Linux线程和ncurses库的使用,所以需要在Linux系统中运行。。#include<curses.h>#include<stdio.h>#include<stdlib.h>#include <unistd.h>#include<pthread.h>#define up 1#define down -1#define left 2#de
2021-05-20 10:17:34 528
原创 C语言中strlen和sizeof的区别
sizeof是求数据类型所占的空间大小,而strlen是求字符串的长度,字符串以/0结尾。各类型数据的存储空间如下:
2021-05-20 09:53:00 84
原创 树莓派串口编程配置 cmdline.txt
初次使用树莓派串口编程,需要配置。/* 修改 cmdline.txt文件 */>cd /boot/>sudo vim cmdline.txt删除【】之间的部分dwc_otg.lpm_enable=0 【console=ttyAMA0,115200】 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait/******************
2021-05-18 15:54:00 1576 1
原创 交叉编译--树莓派
交叉编译--树莓派交叉编译是什么为什么要交叉编译交叉编译需要用到什么工具使用交叉编译交叉编译是什么 交叉编译是在一个平台上生成另一个平台上的可执行代码。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。例如: 我们再windows上面编写C51代码,并编译成可执行代码xx.hex,它是在c51上面运行,不是在windows上面运行 我们在ubuntu上面编写树莓派的代码,并编译成可执行代码如a.out,它是在树莓派上面运行,不是在ubuntu linux
2021-05-10 10:54:20 543
原创 树莓派开发笔记——刷机步骤
树莓派开发笔记——基础配置树莓派刷机安装刷机文件到SD卡修改系统配置USB转串口模块的连接启动树莓树莓派刷机安装刷机文件到SD卡使用一个全新的U盘(读卡器配合SD卡),或者格式化之后的U盘,下载好需要安装的镜像文件和如图所示的一个安装软件,下载后直接点击运行即可然后选择好下载的镜像文件和要安装的U盘这里注意一定要看仔细我们的U盘是哪个,安装错了容易格式化自己电脑上面的其他盘,还有就是安装完成后它会要你格式化你的磁盘,千万不要格式化,不要管他就可以了。修改系统配置1.打开SD卡根目录的"co
2021-04-25 13:11:05 357
转载 Linux学习项目FTP云盘
Linux学习项目FTP云盘基本思路及所需api基本思路服务端:客户端:所需API1、初始化变量memset2、判断文件是否存在access3、执行系统命令popen4、改变当前目录chdir5、字符串分割strtok6、字符串比较strncmp7、获取字符串输入函数gets与fgetsgetsfgets代码例程头文件ftp.h服务器客户端基本思路及所需api基本思路服务端:1:socket 创建服务端的套接字2:bind 端口号和IP地址3:listen 监听客户端的连接4:accept 接
2021-04-18 14:56:15 525
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人