树莓派外设开发

  • wiringPi库的使用
    • 例子---接收指令让继电器工作
    • HC-SR04超声波测距模块简单应用
  • 跨平台文件传输
    • FileZilla软件
    • linux环境自带的scp指令
  • 串口交互
    • 修改cmdline.txt文件内容
    • 接线
    • C字符串相关API处理串口数据

wiringPi库的使用

头文件:include <wiringPi.h>
查看树莓派引脚情况:在显示终端输入命令gpio readall
宏定义引脚:例如#define JDQ 3
wiringPi库初始化:wiringPiSetup()返回值等于-1 初始化失败
设置引脚为输出引脚:pinMode(JDQ, OUTPUT);
设置引脚为输入引脚:pinMode(JDQ, INPUT);
设置引脚为高电平:digitalWrite(JDQ, HIGH);
设置引脚为低电平:digitalWrite(JDQ, LOW);
读取引脚值:digitalRead(JDQ);
编译链库:-lwiringPi

例子—接收指令让继电器工作

#include <stdio.h>
#include <wiringPi.h>#define JDQ 3int handleCmd(int cmd)
{switch(cmd){case 0:digitalWrite(JDQ, LOW);break;case 1:digitalWrite(JDQ, HIGH);break;case 3:printf("quit\n");break;}return cmd;
}int main()
{int cmd;if(wiringPiSetup() == -1){printf("wiringPi init failure\n");return -1;}pinMode(JDQ, OUTPUT);digitalWrite(JDQ, HIGH);while(1){printf("input num(0-light,1-dark,3-quit):");scanf("%d", &cmd);if(handleCmd(cmd) == 3){break;}}return 0;
}

编译链接wiringPi库:

gcc JDQ_demo.c -lwiringPi -o JDQ_demo

HC-SR04超声波测距模块简单应用

HC-SR04超声波测距模块基本信息:
工作电压:5v
echo:回收声波,设置成输入引脚
trig:发射声波,设置成输出引脚
测距范围:最远4米左右
测距原理:当树莓派(trig引脚)持续10us的高电平,声波模块的trig端发送8个40Hz的方波,echo引脚从高电平到低电平的时间就是声波发出后遇到障碍物后反射回来的时间

获取系统函数原型:

int gettimeofday(struct timeval *tv, struct timezone *tz);
struct timeval {time_t      tv_sec;     /* seconds */suseconds_t tv_usec;    /* microseconds */};
struct timezone {int tz_minuteswest;     /* minutes west of Greenwich */int tz_dsttime;         /* type of DST correction */};

场景:通过判断声波模块到障碍物体的距离,可以做一个近距离感应提示灯

#include <stdio.h>
#include <sys/time.h>
#include <wiringPi.h>#define TRIG 1
#define ECHO 2
#define JDQ  3void devInit()
{       pinMode(TRIG, OUTPUT);pinMode(ECHO, INPUT);pinMode(JDQ, OUTPUT);digitalWrite(JDQ, HIGH);
}float getDis()
{long start;long stop;float dis;struct timeval t1;struct timeval t2;digitalWrite(TRIG, LOW); //为了让数据更精准delayMicroseconds(2);digitalWrite(TRIG, HIGH);delayMicroseconds(10);digitalWrite(TRIG, LOW);while(digitalRead(ECHO) != HIGH);gettimeofday(&t1, NULL);while(digitalRead(ECHO) != LOW);gettimeofday(&t2, NULL);start = t1.tv_sec * 1000000 + t1.tv_usec; //s化us,10的6次方stop = t2.tv_sec * 1000000 + t2.tv_usec;dis = (float)(stop-start) / 1000000 * 34000 / 2; //空气中声音的传播速度340m/sreturn dis;
}int main()
{float dis;if(wiringPiSetup() == -1){return -1;}devInit();while(1){delay(2000);dis = getDis();printf("%.2fcm\n", dis);if(dis <= 15){digitalWrite(JDQ, LOW);delay(3000);digitalWrite(JDQ, HIGH);}}return 0;
}

跨平台文件传输

在同一网段下传

FileZilla软件

官网开源下载:https://www.filezilla.cn/
使用:

linux环境自带的scp指令

使用:scp 文件名 目标主机名@目标主机ip地址:目录
例如:scp test.c hhz@172.20.10.6:/home/hhz/
如果目标主机在线,会提示输入目标主机密码

串口交互

串口通信属于全双工,即两个人对骂,同时两个人是能听得见
半双工:一个人被另一个人骂地哑口无言,只能听
树莓派串口数据一次接收数据的量是8个字符,如果要使用串口通信完成某些任务时,可以先将要传的数据弄成容易区分和标记的,然后用字符串相关API处理。

修改cmdline.txt文件内容

vi /boot/cmdlinet.txt编辑文件
方式一
备份好原内容
删除字符串:console=serial0,115200
方式二
备份好原内容或者注释掉,将原内容替换为:

dwc_otg.lpm_enable=0 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

修改后sudo reboot重启,如果重启不了,就重新上电
重启后查看是否有映射成功:ls -l /dev|grep serial

接线

接线跟第一次用串口登录一样

C字符串相关API处理串口数据

头文件:#include <wiringSerial.h>
树莓打开串口:int serialOpen(char *device, int baud)
树莓发数据:void serialPutchar(int fd, unsigned char c)
树莓发数据:void serialPuts(int fd, char *s)
树莓接收数据:int serialDataAvail(int fd)
树莓接收数据:int serialGetchar(int fd)
树莓关闭串口:void serialClose(int fd)

还有vfs虚拟文件系统的API接口,下面的通用性强
vfs提供一个通用的接口,不仅适用于文件读写、网络信息收发、串口读写等等

#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
ssize_t write(int fd, const void *buf, size_t count);

开关灯:

#include <stdio.h>
#include <stdlib.h>
#include <wiringPi.h>
#include <wiringSerial.h>
#include <string.h>
#include <unistd.h>#define JDQ 3void handleCmd(char *pBuf)
{if(!strcmp(pBuf, "opendeng")) //字符串一样返回值为0{digitalWrite(JDQ, LOW);}else if(strstr("closelight", pBuf) != NULL) //搜索子串{digitalWrite(JDQ, HIGH);}else{printf("command error\n");}
}int main()
{int fd;char buf[16];if(wiringPiSetup() == -1){perror("why"); //打印错误信息exit(0); //进程退出函数}pinMode(JDQ, OUTPUT);digitalWrite(JDQ, HIGH);fd = serialOpen("/dev/ttyAMA0", 9600); //第二个参数为波特率,返回值=-1打开串口失败if(fd == -1){printf("serialOpen failure\n");exit(1);}while(1){memset(buf, 0, sizeof(buf)); //memset初始化申请的内存,sizeof()计算数组、结构体等大小read(fd, buf, sizeof(buf)); //fd:文件描述符,buf:将要写入的缓存区if(strlen(buf)!= 0) //字符串长度{printf("receive:%s\n", buf);handleCmd(buf);}}return 0;
}

树莓派外设开发(快速上手)相关推荐

  1. Netron开发快速上手(一):GraphControl,Shape,Connector和Connection

    版权所有,引用请注明出处:<<http://www.cnblogs.com/dragon/p/5203663.html >> 本文所用示例下载FlowChart.zip 一个用 ...

  2. mongodb 输出数组字段_三分钟 mongodb 开发快速上手

    三分钟 mongodb 开发快速上手 小熊昨天晚上做了一个非常真实的噩梦,有读者朋友催我"怎么又没有发文!让我们等的好辛苦",今天一睁开眼眼看后台留言,特么,居然是真的! 我bil ...

  3. 树莓派外设开发基础(wiringPi库)

    参考:树莓派外设开发基础篇 作者:丶PURSUING 发布时间:2021-02-05 18:20:53 网址:https://blog.csdn.net/weixin_44742824/article ...

  4. 《Iphone SDK3开发快速上手》

    <Iphone SDK3开发快速上手> --iPhone SDK 3 Visual QuickStart Guide 译者:(美)Duncan Campbell   著 刘红伟 等译 IS ...

  5. Java开发快速上手

    Java开发快速上手 前言 1.我的大学 2.对初学者的建议 3.大牛的三大特点 4.与他人的差距 第一章 了解Java开发语言 前言 基础常识 1.1 什么是Java 1.1.1 跨平台性 1.2 ...

  6. 《Unity2018AR与VR开发快速上手》随书内容资源相关说明

    我的第二本书,<Unity2018AR与VR开发快速上手>终于上市了,现在天猫和京东都有卖. 随书资源的百度盘链接被关闭了,只给了个"此链接分享内容可能因为涉及侵权.色情.反动. ...

  7. 《Unity 2018 AR与VR开发快速上手》简介

    #好书推荐##好书奇遇季#<Unity 2018 AR与VR开发快速上手>,京东当当天猫都有发售. Unity3D是由Unity Technologies公司开发的一款跨平台的游戏行业软件 ...

  8. 微信小程序开发快速上手

    微信小程序开发快速上手 由于学生工作需要,我最近在一些工具书的参考帮助下尝试进行了微信小程序的开发,本文主要内容为我本人在近期微信小程序开发的过程中,关于指定类型的微信小程序开发的一点心得体会. 1. ...

  9. 树莓派外设开发——超声波

    1.综述 树莓派外设开发需要用的wiringPi()库函数 在调用时需要包含#include<wiringPi.h>文件 使用wiringPi()库函数时需要将其初始化,方法为:调用 in ...

最新文章

  1. 贝索斯:亚马逊正探讨人脸识别如何监管
  2. 怎样调用php的足球联赛接口,足球赛事查询接口调用文档
  3. 数学/找规律/sgu 118 Digital root
  4. 从技术岗位走向管理岗位:机会是留给有准备的人
  5. mysql 数据库引擎
  6. python学习day32 黏包 struct模块
  7. 使用 gunicorn 部署flask项目
  8. 串口发送图片VGA显示
  9. 移动开发平台-应用之星app制作教程
  10. osg加载osgb数据_PCM点云数据处理软件功能使用第十七弹
  11. 华为手机字体改简体_华为手机字体怎么更换简体
  12. 含泪入坑 GMSSL
  13. 一文学会最常见的10种NLP处理技术(附资源代码)
  14. 陶哲轩实分析 习题6.3.3
  15. Verilog 中的Procedural continuous assignments
  16. 未能连接一个windows服务器,Win7出现未能连接一个Windows服务的解决办法
  17. 帝国cms安装 mysql支持错误_帝国CMS安装时 mysql出错。
  18. nodebb 安装指南
  19. 如何听广播来学计算机,MAC使用技巧之苹果itunes如何收听国内的广播?
  20. 解决Realplay和Streambox Ripper冲突的问题

热门文章

  1. 【高性能】Extreme交换机从头到尾配置
  2. Cannot load Counter Name data because an invalid index
  3. 【摘】学佛必读的十大经典佛经
  4. 教你如何安装 Internet 信息服务
  5. matlab正弦函数fft,正弦函数及其FFT变换(一) | 学步园
  6. 阿里联合UC推出移动搜索“神马”
  7. Python中text文件操作
  8. wordpress最佳架构_金融网站的25个最佳WordPress主题
  9. spring boot、SpringCloud、Dubbo
  10. ERR_PNPM_META_FETCH_FAIL GET https://registry.npmjs.org/@webpack-cli%2Fserve: request to https://re