自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 基于树莓派的智能家居开发项目总结

可以通过手机APP和语音控制家电,支持人脸识别开锁,视频监控防盗,以及内设有防火、防震警报。功能比较简单,因为某些模块的缺失,没有做的那么精致。还一个原因就是因为懒。。。这是一个简单的智能家居项目,主控芯片是树莓派3B-cortexA53,其它则是一些外设小芯片。有语音识别模块、摄像头、5V低电平触发继电器、继电器组合4只、电磁锁、微型震动传感器、火焰传感器、蜂鸣器、4只小型led灯。。。wemosD1和433M射频和红外编解码模块没用上。树莓派与wemosD1网络通信参考博文点击这里。

2023-01-01 21:30:16 1614 1

原创 Linux基础之SQLite数据库

1)其中几种数据库表的增删改查没用到的,差不多都是以上的方式去实现2)最重要的是会把 SQLite 数据库的转换成链表的形式或者二叉树的形式。

2022-12-19 14:36:53 2134

原创 Linux基础之Libcurl库之HTTPS协议实现人脸识别

上一篇文章我们调用libcurl库去访问了百度,访问的是http协议的百度云主页。那么现在我们要基于翔云人工智能平台来实现人脸识别,具体的操作大概就是我们在linux下调用libcurl库去访问翔云人工智能平台,然后实现我们想要的两张人脸图片的识别结果这样一个功能。但是翔云人工智能平台的协议是https的协议,这是我们的libcurl库需要支持https协议的话,还需要装上openssl这个库,装好之后我们再重新安装libcurl库并且支持ssl这个库。1.下载openssl库:2.编译 libcurl

2022-12-06 17:56:07 1344

原创 Linux基础之HTTP协议之Libcurl

libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证。libcurl的官网:http://curl.haxx.se/1函数只能用一次。(其实在调用curl_global_cleanup 函数后仍然可再用)

2022-12-04 19:41:57 2133

原创 Linux基础之HTTP协议之HTTPS

http协议是明文传输的,因此很容易被截取和解析,泄漏个人数据。https协议是在http和tcp之间多添加了一层,进行身份验证和数据加密。HTTPS 原理① 客户端将它所支持的算法列表和一个用作产生密钥的随机数发送给服务器② 服务器从算法列表中选择一种加密算法,并将它和一份包含服务器公用密钥的证书发送给客户端;该证书还包含了用于认证目的的服务器标识,服务器同时还提供了一个用作产生密钥的随机数 [2];③ 客户端对服务器的证书进行验证(有关验证证书,可以参考数字签名),并抽取服务器的公用密钥;

2022-12-03 17:31:21 534

原创 Linux基础之HTTP协议

http协议是建立在TCP/IP协议之上应用层协议,默认端口为80,8080http协议的的特点是无状态,无连接利用抓包工具httpwatch可以获取报文http协议的报文传输的是ASCII码,在TCP/IP协议之上,主要主要分为三部分请求行、请求头、请求体1.请求行第一行,包含三个信息:请求方式,url,http协议版本GET 请求POST 请求区别:1)url可见性:get,参数url可见post,url参数不可见2)数据传输上:get,通过拼接url进行传递参数;post,通过body体传输

2022-12-03 17:23:18 315

原创 Linux基础之SOCKET,TCP,HTTP三者之间的区别和原理

下面的图表试图显示不同的TCP/IP和其他的协议在最初OSI模型中的位置:手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。建立起一个TCP连接需要经过“三次握手”:第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),

2022-12-03 16:49:16 330

原创 智能家居开发项目(三):树莓派3B + Pi摄像头

1. 整个项目到最后摄像头模块要学点东西,因为要用到摄像头监控和人脸识别开锁那块功能。树莓派插上摄像头模块,然后我们要用到mjpg-streamer这样一个开源软件。2. mjpg-streamer(1)Mjpg‐streamer是一个开源软件,用于从摄像头采集图像,它将JPEG帧从一个或多个输入插件复制到多个输出插件。它可用于通过基于IP的网络将JPEG文件从网络摄像头流式传输到各种类型的查看器,如Chrome,Firefox,Cambozola,VLC,mplayer和其他能接收MJPG流的软件。(2

2022-12-03 13:48:08 1275

原创 智能家居项目开发(二):项目架构建立

具体怎么链接起来,就是基于简单工厂模式的类与对象的概念,上一篇文章有学习记录。b)主函数语音指令程序和tcp指令程序各起一个线程,然后通过指令找到对应的控制程序,实现对应的模块的功能。其余三盏灯的代码格式和上面bathroomLight.c的一样,这里就不一一展示,已经实现了。测试的结果还不是特别完善,语音模块的口令那块源代码还要改下,然后收到串口的语音指令完善下。语音模块之前有学过,这里主要通过主控芯片树莓派的串口跟语音模块连接。等所有的模块都测试完,会有整个项目的实现效果和总结。

2022-11-28 19:17:58 1519

原创 智能家居项目开发(一):简单工厂设计模式引入

设计模式(英语 design pattern)是对面向对象设计中反复出现的问题的解决方案。这个术语是在1990年代由Erich Gamma等人从建筑设计领域引入到计算机科学中来的。这个术语的含义还存有争议。算法不是设计模式,因为算法致力于解决问题而非设计问题。

2022-11-20 13:18:09 454

原创 树莓派基础之树莓派芯片导读和IO口驱动编程

这些寄存器都是管理GPIO的address:总线地址description:功能介绍Field Name:寄存器名字。

2022-10-04 12:07:32 2418

原创 树莓派基础之Linux内核驱动认知

驱动代码编写:把驱动代码拷贝至 driver/char修改Makefile ,告诉编译器,要编译该驱动文件,驱动代码文件放在哪个目录下就修改哪个目录下的Makefile文件内核驱动装载:内核驱动卸载:sodu rmmod xxx 不需要写ko查看内核模块:lsmod装载驱动驱动装载后生成设备,比如:/dev/pin4,通过sudo chmod 666 /dev/pin4 添加访问权限运行测试程序pin4text调用驱动。

2022-09-25 01:55:21 327

原创 树莓派基础之文件系统认知

一般我们开发是在应用级,然后通过内核的系统调用接口,让内核去完成我们想要的功能。最内层是硬件,最外层是用户常用的应用。硬件是物质基础,而应用提供服务。但在两者之间,还要经过一番周折。还记得。Linux首先启动内核 (kernel),内核是一段计算机程序,这个程序直接管理管理硬件,包括CPU、内存空间、硬盘接口、网络接口等等。所有的计算机操作都要通过内核传递给硬件。为了方便调用内核,Linux将内核的功能接口制作成系统调用(system call)。系统调用看起来就像C语言的函数。

2022-09-16 21:15:37 1481

原创 树莓派之Linux内核基础

启动过程:----》电源----》fastBoot/Bootloader----Linux内核----》文件系统----》虚拟机----》HOME应用程序----》点某图标打开某APP。启动过程:----电源----》Bootloader(引导操作系统启动)----》Linux内核----》文件系统(根据功能性来组织文件,带访问权限)----》KTV点歌机。启动过程:----电源----》BIOS----》windows内核----》C,D盘----》程序启动(QQ)

2022-09-16 01:21:41 2465

原创 树莓派基础之交叉编译

比如:我们在windows上编写C51代码,并编译成可执行代码,如xx.hex,是在C51上面运行,而不是在windows上面运行。再比如:我们在ubuntu上面编写树莓派的代码,并编译成可执行代码,如a.out,是在树莓派上面运行,而不是在ubuntu上面运行。我们废好大力气才找到需要的工具,藏得太深了,我们要改下这个工具的环境变量,这样我们用该工具的时候就不用找这么长的路径了。当树莓派的应用场景需要用到这个wiringPi库中的功能时,我们在ubuntu上编写代码就要加上这个wiringPi库.

2022-09-06 09:53:25 1766

原创 树莓派基础之外设开发编程

超声波传感器模块上通常有两个超声波元器件,一个用于发射,一个用于接收。电路板上有4个引脚:VCC(正极),Trig(触发),Echo(回应),GND(接地),主要参数:工作电压与电流:5V,15mA感测距离:2-400cm感测角度:不大于15°被测物的面积不要小于50cm²,并且尽量平整具备温度补偿电路在超声波模块的触发脚位输入10微秒以上的高电位,即可发射超声波,发射超声波之后,与接收到传回的超声波之前,“脚位” 呈现高电位。

2022-09-05 03:30:34 2507

原创 树莓派基础之语音模块

因为总不可能自己花个几年时间来研发着东西,最后还不一定有人家专门做这个的稳定,那不到最后公司都给你干倒闭了。导入代码前,可以在代码位置新建一个文件来记录下该文件代码的位置,这样我们就可以很轻松的找到目标文件代码的位置了。1)当在工作中,你的主管人给你一个硬件模块让你做二次开发的时候,一定要问主管拿到使用手册,要不然我们不好开发。随着社会分工越来越明确,每个公司主打研发的产品不可能是整个全部自主研发的,它肯定有某些部分硬件是购买来的。不是很成熟,大概率就是会购买别人已经做的很成熟稳定的。

2022-08-30 19:46:22 1240

原创 树莓派基础之嵌入式开发概述

a)嵌入式即嵌入式系统,IEEE(美国电气和电子工程师协会)对其定义是用于控制、监视或者辅助操作机器和设备的装置,是一种专用的计算机系统;b)国内普遍认同的嵌入式系统定义是以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能,可靠性,成本,体积,功耗等严格要求的专用计算机系统;c)从应用对象上加以定义来说,嵌入式系统是软件和硬件的综合体,还可以涵盖机械的附属装置。事实上,所有带有数字接口的设备,如手表,微波炉,录像机,汽车,机器人等,都使用嵌入式系统,有些嵌入式系统还包含操作系统。

2022-08-30 13:45:37 2393

原创 Linux基础之网络编程

1)进程间通信的方式有**:管道,消息队列,共享内存,信号,信号量这么集中2)特点:依赖于linux内核,基本是通过内核来实现应用层的两个进程间的通信3)缺陷:无法多机通讯1)网络编程适用去不同的pc间的通信,可以实现多机运行地址和数据地址是指:IP地址和端口号。每台PC机连网够都有一个IP地址,那么每台联网的PC机可能跑多个服务器,然后每个服务器中对应的有很多进程。当客户端接入的时候,不知道去对接哪个服务器。那么这时端口号对应的就是每个服务器的端口。客户就可以通过端口号连接到对应的服务器了。

2022-08-27 23:52:10 1956

原创 Linux基础之线程

1.通过进程比较引出线程1)典型的UNIX/Linux进程可以看成只有一个控制线程:一个进程在同一时刻只做一件事情。有了多个控制线程后,在程序设计时可以把进程设计成在同一时刻做不止一件事,每个线程各自处理独立的任务。2)进程是程序执行时的一个实例,是担当分配系统资源(CPU时间、内存等)的基本单位。在面向线程设计的系统中,进程本身不是基本运行单位,而是线程的容器。程序本身只是指令、数据及其组织形式的描述,进程才是程序(那些指令和数据)的真正运行实例。3)线程是操作系统能够进行运算调度的最小单位。

2022-08-23 10:57:55 601 1

原创 Linux基础之进程间通信

进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。

2022-08-21 20:06:07 297

原创 Linux基础之进程

1)一个父进程希望复制自己,是父,子进程同时执行不同的代码段。这在网络服务进程中是常见的———父进程等待客户端的服务请求。但这种请求到达时,父进程调用fork,使子进程处理此请求。父进程则继续等下下一位服务请求到达。2)一个进程要执行一个不同的程序。这对shell是常见的情况。在这种情况下,子进程从fork返回后立即调用exec。int data;printf("请输入一个值:\n");printf("欢迎来到子进程,我的ID号是:%d\n" , getpid());sleep(3);

2022-08-19 17:39:05 238

原创 Linux基础之文件编程

1.文件描述符1)对于内核而言,所有打开文件都由文件描述符引用。文件描述符是一个非负整数。当打开一个现存文件获创建一个新文件时,内核向文件返回一个文件描述符。当读写一个文件时,用open和creat返回的文件描述符标识该文件,将其作为参数传递给read和write。按照惯例,UNIX shell使用文件描述符0与进程的标准输入相结合,文件描述符1与标准输出相结合,文件描述符2与标准错误输出相结合。

2022-08-16 01:45:43 1592

原创 C语言基础之链表

1)从一个节点前面插入一个节点,定义一个新节点,找到想要插入节点的位置,首先要判断是否是在链表头插入一个新节点,如果是,那么把新节点里面的指针指向链表的头节点,然后把新节点作为链表头返回就好。2)如果要删除的头节点不是头节点,找到要删除的节点,直接绕过该节点,把要删除的节点的前一个节点的指针指向的位置等于该节点的指针指向的后一个位置,然后返回头节点就好了。3)链表也是一串数据,所以只要知道头节点就可以访问出整个链表,头节点很关键!3)调用函数返回参数时,要注意函数的类型,注意返回的值是否正确**

2022-08-13 21:09:55 378

原创 C语言基础之结构体

因为是对野指针直接赋值,出现段错误,人家都还只是一个地址,都还没有开辟空间呢你就给人家赋值,所以对使用指针一定要注意,要先开辟空间再初始化,最后再赋值!3)这里的数据类型包括内部数据类型(int ,char 等)和自定义数据类型(struct 等)因为是对字符串数组进行赋值,数组定义出来就已经申请了空间,所以可以直接赋值。1)结构体成员的偏移量必须是成员大小的整数倍(0被认为是任何数的整数倍)2)结构体大小必须是所有成员大小(数组除外,结构体除外)的整数倍。2)作用是为一种数据类型定义一个新名字。

2022-08-09 22:34:35 662

原创 C语言基础之字符串

1.什么是字符串?字符串就是字符数组,好多个字符串起来的一组数据2.直接看代码,注意自己写的注释int i;//定义了一个字符数据类型c //所以,第一种定义字符串数组的方式 char str [ 3 ] = {//和整型数组相似 //访问方式 for(i - 0;i ++) {//第二种定义字符按串数组的方式 char str2 [ 3 ] = "abc";//也和整型数组相似 for(i = 0;i ++) {...

2022-08-08 18:13:26 2405

原创 C语言基础之指针

1.内存泄漏是指:程序刚跑起来很好,跑了几个小时,或者几天,几周,程序崩溃了2:如何避免:a.首要怀疑对象就是循环中有没有,使用malloc函数不断的申请开辟空间 b.及时合理的释放,利用free(指针名);指针名 = NULL;...

2022-08-06 22:43:44 425

原创 C语言基础之数组

1:数组是数据的集合。2:数组的数据是同类型的,1-100都是整数,不能是1.1, 1.2,1.33:数组的地址是连续的//1.没有初始化的数组,仅仅申请了10个整形数的内存空间,最好要初始化: int array[10] = {0};//2.有初始化的数组,完整初始化,该数组申请了十个整型数的内存空间,并赋值十个数 1 2 3 4 5 6 7 8 9 10 int array [ 10 ] = {...

2022-08-05 15:08:45 388

原创 C语言基础-函数之成绩判断

函数是一个功能模块,它把实现某个功能的代码包含起来,并起一个函数名,供别人调用。如printf函数,如system函数,是程序运行当中包装起来的一个步骤

2022-07-22 00:18:02 1296

原创 C语言基础-选择语句之成绩判断

c语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。想要入门的小白的我也看不懂官方解释,目前有限的认知它是一门高级语言,该语言可以开发系统软件,比如后面要学习到的linux是用C语言开发的。...............

2022-06-17 01:11:41 2779 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除