基于智能家居的安防系统
0、任务需求采集摄像头、烟雾传感器、温湿度传感器 (DHT11)、火焰传感器、光敏传感器
执行器:风扇、花洒、led灯
pc端订阅:video_stream、shu_data pc端发布:pc_data
树莓派:发布视频流到:video_stream, 发布数据:shu_data,接收(订阅)数据在:pc_data
温度:tem 温度阈值: th_tem
湿度:hum 湿度阈值:th_hum
空气质量:mq2 空气阈值: th_mq2
光照:light 光照阈值: th_light
火焰: fire
0、 树莓派的基本操作1、如何查看树莓派的引脚资源1pinout
2、固定CPU的频率树莓派4B全核心最大频率为1.5 GHz,单核最大频率为1.5 GHz
所以可以设置cpu的频率为1.5GHz
方法一用cpufrequtils工具
12345sudo apt install cpufrequtils #安装该工具alias get_cpu='sudo cpufreq-info -w -m ...
QT配置opencv环境
1、安装QT、cmake、opencv1、安装QT和Cmake这里安装qt和cmake我就不说了,我的QT版本是5.15.2
cmake去官网安装最新的就可以了。
2、安装opencv去官网安装opencv,因为opencv后面的版本有很多有版权问题,所以可以下载opencv3.x不要下载太高的版本,这样可以跟一些程序兼容好点
下载完成之后打开,选择最好是qt的安装路径
2、cmake编译opencv打开刚刚的路径会是下面这样,source是源码路径,在当前文件中新建一个文件夹
打开cmake gui,这个新打开的应该没有这个红色的区域,我这个是已经处理好的了
然后点击configure,开始编译
选择编译器
这里要选择你qt安装路径下的c和c++的编译器
123# 参考我的,要改成你自己的D:/software/QT5/Tools/mingw810_64/bin/gcc.exeD:/software/QT5/Tools/mingw810_64/bin/g++.exe
c对应的是gcc c++对应的是g++
然后点击finish
等待编译完成
3、cmake ...
树莓派记录
0、锁定文件123sudo rm /var/lib/apt/lists/lock # 解决 “Could not get lock /var/lib/apt/lists/lock”错误sudo rm /var/lib/dpkg/lock # 解决 “Could not get lock /var/lib/dpkg/lock”错误
1、32位更改源(64位系统目前没有试过)开启了 SSH 服务器之后,就是更换国内可用的镜像源了。
首先是为什么要使用国内镜像源?
主要就是树莓派官方 Raspbian 系统默认设置软件源为 http://raspbian.raspberrypi.org/raspbian/ 和 http://archive.raspberrypi.org/debian/,这两个网站在国内通常连接缓慢,及其影响用户使用体验。
那么如何更换国内源?
Raspbian系统的apt软件源由/etc/apt/sources.list和/etc/apt/sources.list.d/raspi.list两个文件设定,只需更改两个文件内的记录即可。
目前国内可用的镜像 ...
树莓派使用摄像头网络实时监控
1、使用motion(方法一推荐)1、安装motion1sudo apt-get install motion
2、修改 /etc/default/motion文件1sudo nano /etc/default/motion
改成:(多半是没有这个文件,那就创建一个呗)
start_motion_daemon=yes
3、修改/etc/motion/motion.conf配置文件1sudo nano /etc/motion/motion.conf
如果在之前开启过motion服务要先杀死motion进程
1sudo killall -TERM motion
将文件的对应功能开启,可以参考以下这个配置
12345678910111213#Start in daemon (background) mode and release terminal (default: off)daemon on # The mini-http server listens to this port for request ...
使用hexo+github搭建个人博客
1、安装软件1、hexo是什么官网:hexo.io
Hexo 是一个快速、简洁且高效的静态博客框架,它基于 Node.js 运行,可以将我们撰写的 Markdown 文档解析渲染成静态的 HTML 网页。
2、node安装 nodejs, 因为Hexo是基于 Node.js 驱动的一款博客框架。
⭐nodejs下载地址
3、git安装git, 一个分布式版本控制系统,用于项目的版本控制管理,作者是 Linux 之父。
⭐Git(官网)
上述软件都可以直接下一步,改个文件路径就行
2、hexo的一些指令开启本地服务器*首先在磁盘中创建一个用来存放Github本地仓库文件的目录blog*(可自定义目录存放)
在这个路径下可以直接输入cmd,也可以用git bush
更换源,把国外的源换成国内的
1npm install -g cnpm --registry=https://registry.npm.taobao.org
安装hexo
1cnpm install -g hexo-cli
初始化hexo,这个操作会在当前路径生成博客需要的文件
1hexo in ...
排序算法
1、冒泡排序
原理
从第一个开始与后面的一个比较如果不相等就替换,一直比下去就会把最大的或者最小的比到最后一个元素,下一次比较的时候就把第二大或者第二小的放在倒数第二个,依次重复下去就实现排序。
时间复杂度
冒泡排序最好的时间复杂度为O(n)
冒泡排序的最坏时间复杂度为O(n^2)
冒泡排序最好的时间复杂度为O(n)
空间复杂度
排序过程中只是使用数组原本的空间进行排序,因此空间复杂度为O(1)
1234567891011121314151617void Bubble_Sort(int arr[],int size){ int i=0,k=0; int temp = 0; for(i=0;i<size;i++) { for(k=0;k<size-i-1;k++) { if(arr[k]<=arr[k+1]) // 从大到小 { temp = arr[k]; // 替换位置 ...
笔试合集
1、宏定义printf()问题提出有时候我们想用宏定义来决定是编译debug版本的代码还是release的代码,dubug版本的代码会通过printf打印调试信息,release版本的代码则不会。我们总不能对每一条printf都这样写:
123#if IS_DEBUGprintf("hello world!");#endif
解决方法我后来想到一个方法,可以使用宏定义代替printf函数,由于printf是可变参数的函数,这里就要用到变參宏(…和__VA_ARGS__)。在头文件下写此代码
后面需要打印调试信息的时候使用PR宏就可以了,如果需要release版本,不打印调试信息,就把DEBUG设置为0,编译出来的程序就不会打印调试信息了。
12345678910111213141516171819202122#include "stdio.h"#define IS_DEBUG 1 // 需要调试信息#if IS_DEBUG#define PR(...) printf(__VA_ARGS__)#else#define PR(...)#en ...
GY39测量温湿度和光照强度用C51单片机实现
一、GY-39的介绍GY-39 是一款低成本,气压,温湿度,光强度传感器模块。工作电压 3-5v,功耗小,安装方便。其工作原理是, MCU 收集各种传感器数据,统一处理,直接输出计算后的结果。
在此模块中,有两种方式读取数据,即串口 UART( TTL 电平)或者 IIC( 2 线)。这里就是利用C51的串口采集GY-39的数据。
通信协议串口通信参数可以有以下两种选择:1、波特率: 9600 bps 校验位: N 数据位: 8 停止位: 12、波特率: 115200 bps 校验位: N 数据位: 8 停止位: 1我们将使用方式一,用9600的波特率 (如果是stm32可以使用方式二)
GY39的命令数据帧格式GY39模块是以命令的方式发送数据的,简单来说就是当你发送一个指令,GY39就回复对应的数据给你,如:你发送取光照强度的指令,Gy39就回给你光照的数据。
GY-39模块的所有串口指令格式为:帧头: 0xa5(固定的)所以指令格式:帧头+指令+校验和(8bit)发送命令: 0xA5+0x81+0x26,表示连续输出光照强度,掉电后保存该设置,重新上电 ...
STM32F407的串口接收不定长数据两种方式HAL库
概要STM32的串口接收不定长数据,最近在看超子说物联网,感觉太麻烦了不适合直接上手,然后我自己总结了两种方法:1、不利用DMA2、利用DMA方式
整体架构流程 这个HAL整起来是方便,但是HAL整体来说对于细节很到位就是逻辑很强逻辑,也就很繁琐,效率又不高,还缺胳膊少腿的。好用,就比如说这个串口接收,没有专门的方法调用。搞的就很麻烦,我第一次接触就是这感觉哈,大佬除外。
然后我看到超子说物联网可以用这个串口的空闲中断来搞这个串口的不定长接收。
大致的原理是:在接收每一段数据帧之后就会放开这个串口,产生了这个串口的空闲中断(IDLE),然后我们可以捕捉这个UART_FLAG_IDLE这个标志位,然后这个标志位被置位了,我们就可以说这段数据被接收完成了。
我们使用STM32F407给大家做一下,大概流程
不用DMA的方式先选择SYS
使能串口1开启中断配置时钟生成工程进入代码打开usart.c的MX_USART1_UART_Init这个函数在后面加上开启中断的代码
开启串口接收和串口的空闲中断之后就是一直等待 ,等待串口接收到数据,一旦接收数据就触发串口中断进入USART1_IRQHan ...
连接阿里云(最详细+可移植)教程
概要STM32F103c8t6+ESP8266(esp-01s)+MQTT固件 连接阿里云里面用到了对串口不定长的数据的DMA+中断的接受方式。不了解的可以看这个篇文章STM32F407的串口接收不定长数据两种方式HAL库
一、MQTT固件对于该项目我们利用了MQTT固件,这个固件可以让我们更加简单的利用MQTT进行数据传输,利用该固件我们不需要对MQTT进行封装,直接用。我们可以去安信可的官网下载MQTT的固件(安信可官网固件下载)在安信可的官网上下载的固件还需要下载下载进esp8266的工具。如果这个有对应的下载工具。也有mqtt的固件链接:https://pan.baidu.com/s/1gbizlkm997HnCW5H3B7n3A提取码:8ex1我尝试了一下1471这个固件号的是可以用的,其他的好像型号不对flash大小不够,有专业的可以给我讲解一下,谢谢。
下载的方式是利用串口,可以用wifi的转接板或者别的串口工具。我这边用的时转接板。插上之后选择esp8266下载工具进入之后根据下图进行操作MQTT固件连接阿里云对比AT固件连接云平台来说是更加简单,我们只需要掌握MQTT ...