自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 资源 (2)
  • 收藏
  • 关注

原创 ubuntu20.04 配置UI root登录和ssh root登录

一、开启root用户sudo passwd root二、修改配置文件2.1sudo vi /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf增加 greeter-show-manual-login= true2.2sudo vi /etc/pam.d/gdm-autologin注释掉auth required pam_succeed_if.so user != root quiet_success2.3sudo vi

2021-10-19 11:04:40 385

原创 通过C语言判断大小端模式

一、概念大端模式:多位数据的高位在低地址小段模式:多位数据的地位在低地址二、C语言编程方法一:short int两字节,获取其地址后强转为char型指针,然后指针+1,获取高位地址,读取高位地址的数据short int a = 0x1234;printf("a:%x\n", a);printf("a high:%x ; a low:%x\n", *((char *)(&a) + 1), *(char *)(&a));方法二:联合体的元素共用一片,每个元素从低地址开始存放

2021-07-30 18:27:30 385

原创 mosquitto教程(三)开启服务器及客户端发布和订阅

一、mosquitto1.1参数说明-c 指定配置文件路径-d 后台运行-h 显示帮助-p 指定端口号,不推荐跟-c配置文件指定端口号一起使用-v 监控日志1.2修改配置文件cp mosquitto.conf.example mosquitto.confvi mosquitto.conf1.3开启mosquitto服务器默认配置方式开启mosquitto指定配置文件开启mosquitto -c /etc/mosquitto/mosquitto.conf二、mosqui

2021-07-30 15:15:16 5079

原创 mosquitto教程(二)mosquitto.conf说明

一、服务器IP和端口号设置(1)bind_address表示开启服务器的IP地址,默认0.0.0.0(2)port表示端口号,默认1883二、开启和关闭匿名访问allow_anonymous表示允许匿名访问,默认ture,如上图为关闭匿名访问三、指定保存账号密码的文件所在位置password_file用于指定保存账号密码的文件所在位置,默认无,禁止匿名访问需要后指定路径...

2021-07-29 17:48:28 2792

原创 mosquitto教程(一)ubuntu18.04编译源码方式安装

一、下载源码wget http://mosquitto.org/files/source/mosquitto-1.4.15.tar.gztar -xvf mosquitto-1.4.15.tar.gz二、安装依赖sudo apt-get install libssl-devsudo apt-get install libc-ares-devsudo apt-get install uuid-devsudo apt-get install g++三、修改配置文件cd mosquitto

2021-07-29 17:27:31 596

原创 ubuntu18.04交叉编译openssl和curl

CC=arm-linux-gnueabihf-gcc ./config no-asm -shared --prefix=/home/peng/system/openssl-1.1.1i/_installenv LDFLAGS=-R/usr/local/src/arm-linux/openssl/lib ./configure --prefix=/usr/local/src/arm-linux/curl CC=arm-linux-gnueabihf-gcc --host=arm-linux --with

2021-04-28 20:04:04 621

原创 温湿度传感器DHT11数据手册详解(Linux内核驱动)

一、引脚说明二、时序解读2.1、通信过程2.2、开始信号主机发送一个大于18ms的低电平给DHT11作为启动信号。然后拉高20-40us后读DHT11响应信号。发开始信号 DHT11_IO_OUT(); //SET OUTPUT DHT11_OUT_LOW(); //拉低DQ delay_ms(5); //拉低至少18ms delay_ms(5); delay_ms(5); delay_ms(5); DHT11_OUT_HIGH

2021-04-27 09:47:26 8558

原创 IIC器件之PCF8591数据手册详解(DATA SHEET)

一、引脚解读AOUT 芯片DA输出接口AIN0 芯片模拟输入接口0AIN1 芯片模拟输入接口1AIN2 芯片模拟输入接口2AIN3 芯片模拟输入接口3SCL IIC串行时钟线SDA IIC串行数据线VDD 正电源电压VSS 负电源电压VREF 电压参考输入AGND 模拟地A0、A1、A2 可编程位器件地址二、器件地址4位固定位,3位可编程位,1位读写位。三、控制字节3.1 X1、X0表示选择AD采集的通道3.2 X2是否自动变更采集通道3.3 X4、X5

2021-04-26 15:55:51 8216 1

原创 简单物联网(一)如何回家前提前开空调(手撕物联网平台)

一、前期准备1、首先家里得有wifi信号覆盖2、eps8266芯片3、红外编解码芯片4、云服务器二、基础知识1、c语言链表2、红外编解码芯片的使用3、linux网络编程三、如何实现跨网控制3.1、云服务器直接运行基于mqtt等物联网协议的服务端程序3.2、接入现成的各大物联网平台3.3、自己写一个物联网平台(本文做法)四、参考mqtt协议写一个物联网平台程序(超级简化版mqtt)4.1、mqtt核心(发布/ 订阅模型)发布/ 订阅模型将发送消息的客户端(发布者)与接收消息的客户

2021-04-24 11:17:41 1187 3

原创 IIC通信(三)使用IIC测试工具测试PCF8591(树莓派)

一、开启IIC功能sudo raspi-config二 、安装IIC测试工具sudo apt-get install i2c-tools三、使用PCF8591测试3.1查看挂载在IIC总线上的设备i2cdetect -y 13.2 AIN0读一次ADC测量值i2cset -y 1 0x48 0x00i2cget -y 1 0x48i2cget -y 1 0x48选择AIN0作为采集通道,PCF8591读到的第一个字节为上一次采集结果,因此要读两次。5V参考电压,AIN0

2021-04-22 21:30:58 1065

原创 基于Linux curses库的贪吃蛇

一、必须基础知识1、链表的增删改查2、Linux多线程编程3、Linux curses库的使用二、核心思想使用动画的思想,蛇每移动一次重新画一次游戏界面,然后覆盖上一次的游戏界面void PrintMap()因此有一个线程用于刷新地图void* RefreshMap(void *arg){ usleep(SPEED); while(1){ MoveSnake(key); move(0,0); PrintMap(); refresh(); usleep(SPE

2021-04-22 21:00:01 168

原创 IIC通信(二)stm32软件模拟IIC(PCF8591为例)

一、IIC使用进阶过程1.1调用高度封装的IIC读写函数void IIC_Write_One_Byte(u8 daddr,u8 addr,u8 data);u8 IIC_Read_One_Byte(u8 daddr,u8 addr);只需要看芯片手册,知道器件地址,命令或寄存器地址,调用IIC写或写函数,便可完成一次写或写操作。1.2调用封装好的IIC操作函数,对着时序自己封装对IIC器件的操作函数//IIC所有操作函数void IIC_Init(void);

2021-04-22 20:31:14 1416

原创 IIC通信(一)简单介绍

一、IIC个信号时序二、IIC数据传输的三种方式2.1主器件写数据或发命令到从器件2.2主器件读取从器件的数据2.3混合模式三 、IIC器件地址一般IIC器件地址为7位,也有10位的。7位地址由4位固定位、3位可变位组成。IIC总线通过唯一确定的地址选址到对应器件。...

2021-04-22 20:09:03 539

原创 Linux公网通信(一)神器autossh(树莓派跨局域网远程监控和远程登录)

一、基本概念IP:找到接入网络的某台主机。端口号:找到主机上的某一个网络进程。二、问题描述一般位于不同局域网的两台电脑是不能直接进行通信的(ping通),它们分配到的都是私网IP,只在当前网络具有特异性,诸如192.168.x.x等IP,它们需要借助公网IP通信。三、如何借助公网IP进行不同局域网之间通信3.1方案第一种:使用SSH反向隧道(本文介绍)第二种:使用frp第三种:使用花生壳3.2简述以上都是内网穿透的方案。内网主机要找到公网服务器十分简单,反过来的话需要进行内网穿透,使具

2021-04-22 09:56:22 809

原创 树莓派4B内核驱动开发(二)本地编译内核

一、下载源码 git clone --depth=1 https://github.com/raspberrypi/linux --branch rpi-5.4.y二、安装依赖sudo apt install git bc bison flex libssl-dev make三、配置内核cd linuxKERNEL=kernel7lmake bcm2709_defconfig四、编译内核并安装make -j4 zImage modules dtbssudo make modules

2021-02-24 20:35:58 613

原创 树莓派4B内核驱动开发(一)交叉编译内核

一、下载对应版本内核1.1查看内核版本uname -a1.2在ubuntu18.04下载内核源码git clone --depth=1 https://github.com/raspberrypi/linux --branch rpi-5.4.y二、安装依赖sudo apt install git bc bison flex libssl-dev make libc6-dev libncurses5-dev$ sudo apt install crossbuild-essential-

2021-02-24 18:40:59 1674

原创 树莓派3B调用翔云人脸识别接口(cjson格式)

一、修改部分int post_faceMatch(double *faceMatch)这个函数里面的key和secret修改对应的图片名二、程序部分#include <stdlib.h>#include <stdio.h>#include <string.h>#include <curl/curl.h>#include <cjson/cJSON.h>#include <sys/types.h>#includ

2021-02-08 18:01:34 348

原创 树莓派4B开发笔记(五)c语言https访问百度AI人脸识别接口之c语言编程

一、修改部分1.1int post_access_token(char *access_token)这个函数里面的 AK 和 SK2.2int post_faceMatch(double *faceMatch, char *access_token)这个函数里面的getbase64()函数的参数(对应图片名)二、程序#include <stdlib.h>#include <stdio.h>#include <string.h>#include

2021-02-08 17:52:13 672

原创 linux树莓派3b智能家居(五)双线程之FTP和语音控制

Linux多线程创建线程 int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);使用前先声明一个进程标识符变量pthread_t *thread;以及声明固定格式函数void *task(void *arg) The attr argument points to a

2021-01-09 10:34:15 371

原创 linux树莓派3b智能家居(四) FTP控制继电器(客户端篇)

核心思想取指->译码->执行因为是使用串口输入,所以依旧可以使用这种思想译码函数(与前两篇相同)提高代码复用性,并且可以屏蔽无用指令,虽然最后还是发的ascll码形式。客户端程序(删的只剩框架)#include <sys/types.h>#include <sys/socket.h>#include <stdio.h>#include <stdlib.h>#include <arpa/inet.h>#include

2021-01-09 10:34:04 236

原创 linux树莓派3b智能家居(三) FTP控制继电器(服务器篇)

核心思想取指->译码->执行参考上篇译码函数(与语音识别控制继电器相同)FTP控制继电器(删的只剩框架)#include <sys/types.h>#include <sys/socket.h>#include <stdio.h>#include <stdlib.h>#include <arpa/inet.h>#include <netinet/in.h>#include <string.h&gt

2021-01-09 10:33:51 356

原创 linux树莓派3b智能家居(二) 语音模块控制继电器

修改cmdline(略)语音识别模块二次开发识别口令后串口发送的信息识别操作语音发送的信息(开所有灯,开红灯……)核心思想取指->译码->执行为什么不让串口直接发送与继电器驱动对应的指针???语音识别模块不好发送16进制格式的指针!!!!一丶通过read串口读取指令(ascll形式)二丶将读取到的指令转化为继电器驱动规定的输入指令格式三丶将转化后的指令write到内核驱动语音模块控制程序(删的只剩框架)#include <sys/types.h>#inc

2021-01-09 10:33:34 749

原创 linux树莓派3b智能家居(一) 继电器驱动编写以及测试

驱动文件编写(基于框架)基本框架#include <linux/fs.h> //file_operations声明#include <linux/module.h> //module_init module_exit声明#include <linux/init.h> //__init __exit 宏定义声明#include <linux/device.h> //class devise声明#include <li

2021-01-09 10:33:21 569 1

原创 树莓派4B开发笔记(四)c语言https访问百度AI人脸识别接口之安装相关库

一、安装openssl库1.1、下载openssl源码https://www.openssl.org/source/1.2、解压、配置、编译并安装tar -xzf openssl-1.1.1i.tar.gzcd openssl-1.1.1i/./configmake -j4sudo make install二、安装curl库2.1下载curl源码https://github.com/curl/curl/releases/tag/curl-7_71_12.2、解压、配置、编译并

2020-12-31 16:21:56 1582 3

原创 LINUX配置环境变量(LIBRARY_PATH)使gcc编译时能找到动态库

错误/usr/bin/ld: cannot find -lcurlcollect2: error: ld returned 1 exit status操作修改/etc/profilesudo vi /etc/profile最后一行增加export LIBRARY_PATH=$LIBRARY_PATH:XXXXX立即生效文件source /etc/profileLIBRARY_PATH含义LIBRARY_PATH是程序编译期间查找动态链接库时指定查找动态库的路径...

2020-12-31 16:19:09 630

原创 树莓派4B开发笔记(三)扩容及安装mjpg-streamer

扩容sudo raspi-config更新软件sudo apt-get update #更新软件列表sudo apt-get upgrade #更新软件安装依赖和相关工具sudo apt-get install subversionsudo apt-get install libjpeg8-dev #JPEG支持库sudo apt-get install imagemagicksudo apt-get install libv4l-dev #4l是小写"L"sud

2020-12-28 21:19:17 1090 2

原创 树莓派4B开发笔记(二)网络配置ssh登录、换源安装vim及升级wiringPi库

一、连接wifi第一种方法sudo raspi-config输入自己的wifi账号输入wifi密码第二种方法sudo nano /etc/wpa_supplicant/wpa_supplicant.conf ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdevupdate_config=1country=CNnetwork={ ssid="xxx" psk="xxxx"}net

2020-12-28 19:35:55 231

原创 树莓派4B开发笔记(一)无显示器串口登录

一、修改config.txt文件最后加上三行dtoverlay=pi3-miniuart-btstart_x=1gpu_mem=128二丶修改cmdline.txt文件删除rootwait之后的内容,剩下内容如图所示

2020-12-28 18:52:09 515

原创 C语言偏门知识点(一)全局变量和局部变量同名

变量的作用域可以理解成一个大括号就是一个作用域局部变量和全局变量同名一般情况,局部屏蔽全局,也可以说小作用域屏蔽大作用域这种情况下,如何访问全局变量?核心:搞一个更小的作用域,通过extern指定外部寻找#include <stdio.h>void test(){ printf("test\n");}int main(int argc, char const *argv[]){ int test; { exte

2020-12-25 18:10:32 1944

原创 STM32学习笔记(四)定时器配置及中断

定时器初始化示例定时器相关函数TIM_TimeBaseInitvoid TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);typedef struct{ uint16_t TIM_Prescaler; /*!< Specifies the prescaler value used to divide the TIM clock.

2020-12-25 17:08:53 1556 1

原创 STM32学习笔记(三)中断配置和优先级说明

中断相关函数NVIC_PriorityGroupConfigvoid NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);#define NVIC_PriorityGroup_0 ((uint32_t)0x700) /*!< 0 bits for pre-emption priority 4 bits fo

2020-12-22 18:49:00 904 1

原创 STM32学习笔记(二)USART配置、接收和发送

UART初始化示例void UART1_Init(uint32_t BaudRate){ USART_InitTypeDef USART_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); RCC_APB2Perip

2020-12-22 18:34:21 9265 1

原创 STM32学习笔记(一)GPIO普通输入输出

GPIO8种工作模式浮空输入模式I/O的电平状态是不确定的,完全由外部输入决定;如果在该引脚悬空的情况下,读取该端口的电平是不确定的。上拉输入模式输入低电平下拉输入模式输入高电平模拟输入模式I/O端口的模拟信号(电压信号,而非电平信号)直接模拟输入到片上外设模块开漏输出模式置0,输出低电平;置1,输出又外部上拉或者下拉决定复用开漏输出模式与开漏输出模式很是类似。输出的高低电平由片上外设模块的复用功能输出来决定的。推挽输出模式输出高低电平复用推挽输出模式与推挽输出模式很是类似。

2020-12-19 19:11:29 555 3

原创 可以做一下的C语言题目之笔试题(三)——括号匹配

可以做一下的C语言题目(三)——括号匹配括号匹配说明栈的实现基于C语言骚操作(一)(二)代码#include <stdio.h>#include <string.h>#include "list.h"int isMatch(Sqlist *sqlist){ Elemtype e = 0; Elemtype c = 0; while((e = getchar()) != '\n'){ if(e == '(' || e ==

2020-11-14 15:35:14 235

原创 C语言骚操作(二) 顺序表特例成栈

C语言骚操作(二) 顺序表特例成栈说明栈的特点是后入先出,每次操作都在表尾,只要让顺序表每次增加都往表尾增加一个元素,每次删除都删除表尾的元素,这个顺序表就有栈的特征。核心程序sqlist->listInsert_Sq(sqlist,sqlist->length+1,e);sqlist->listDelete_Sq(sqlist,sqlist->length);...

2020-11-14 15:31:52 247

原创 C语言骚操作(一)线性表之顺序表配合简单工厂模式

C语言骚操作(一)线性表之顺序表配合简单工厂模式list.h#ifndef _LIST_H#define _LIST_H#define LIST_INIT_SIZE 100#define LISTINCREMENT 10#define Elemtype chartypedef struct List{ Elemtype *elem; int length; int listSzie; struct List *(*init_Sq)(struct List *

2020-11-14 15:21:52 128

原创 没必要做的C语言题目(三)——打印方阵

没必要做的C语言题目(三)——打印方阵题目B. 打印方阵描述给定方阵的大小与方阵的组成字符,打印一个字符矩阵。输入方阵的大小 nnn (1≤n≤10)(1 \leq n \leq 10)(1≤n≤10),将要打印的字符 ccc 。输出打印一个对应方阵,字符与字符之间用空格隔开。样例输入复制2 c输出复制c c c c 输入复制4 A输出复制A A A A A A A A A A A A A A A A 方法一#include <stdio.h>

2020-11-11 21:54:45 1056

原创 可以做一下的C语言题目之笔试题(二)——二分查找法插入排序

可以做一下的C语言题目(二)二分查找法插入排序#include <stdio.h>void initArray(int *array, int size){ int i = 0; for(i = 0; i < size ; i++){ array[i] = rand()%30; }}void insertionSort(int *array, int size){ int i = 0; int j = 0;

2020-11-11 17:53:07 187

原创 可以做一下的C语言题目之笔试题(一) ——二分查找法

可以做一下的C语言题目(一)#include <stdio.h>typedef struct{ int id; const char *name;}element;void initElement(element* elements, int size){ int i = 0; for(i = 0; i < size; i++){ elements[i].id = i; }}const element *fin

2020-11-11 16:05:31 242

原创 没必要做的C语言题目(二)——线性筛选表法求素数表

没必要做的C语言题目(二)线性筛选表法求素数表#include <stdio.h>#define MAX 40int main(){ int notPrime[MAX] = {0}; int prime[MAX] = {0}; int i = 0; int j = 0; int count = 0; for(i = 2;i < MAX;i++){ if (notPrime[i] == 0){

2020-11-09 17:37:10 137

iotServer.zip

手写的C语言物联网服务器,可以实现客户端接入,和客户端之间的消息转发。例如:esp8266接入,安卓app通过服务器转发消息给esp8266,实现远程开关电器。

2021-04-27

dht11driver.c

树莓派4B DHT11 Linux内核驱动,使用BCM编码的管脚GPIO26

2021-04-27

空空如也

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

TA关注的人

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