Ehome:智能家居之led控制系统
3. LED的控制
3.1 LED驱动程序
实质就是一个linux字符设备驱动
$:' cd project
$:' mkdir drivers
$:' cd drivers
$:' mkdir leds
$:' cd leds
// ---> madir drivers/leds -p
$:' vi led_drv.c
$:' vi Makefile
$:' make
$:' mkdir ../../rootfs/home/drivers
$:' cp leds_drv.ko ../../rootfs/home/drivers/
$:' vi test.c
// 验证程序。使用arm-...-gcc编译。
编译test.c,测试驱动程序是否好用
3.2 编写LED的控制应用程序
有两种方式
3.2.1 简单的方式 - 槽函数方式1
当点击亮灯按钮时,完成该信号的槽函数
在槽函数中
fd = open("/dev/leds", ...)
ioctl(fd, CMD_LED_ON, &i); // i 是第几盏灯
close (fd);
修改图片
再次点击时灭灯
fd = open("/dev/leds", ...)
ioctl(fd, CMD_LED_OFF, &i);
close (fd);
修改图片
GUI界面程序一定部署到开发板才能有效果
3.2.2 复杂方式 - 槽函数方式2
希望GUI界面程序不管是运行在PC
或者运行在开发板,都能控制开发板的LED状态
'Client (GUI 开发板/PC)' 'Server (UDP 运行在开发板)'
点击按钮发送命令LED_ON 接收命令,根据命令open设备 ioctl亮灯
sendto (sd, cmd);
公共头文件:project/include/ehome.h
1)界面客户端程序 client
$:' mkdir gui_client
$:' cd gui_client
$:' qtcreator
建立工程 完成界面编程
先将mainwindow窗口的大小调整为 1024*600
添加按钮 - 转到槽
槽函数中给UDP服务器发送命令
---> 3.2.1
2)服务器程序 server
$:' cd project
$:' mkdir server
$:' cd server
$:' vi server.c
// udp 创建socket,接收客户端发送的命令,解析命令调用不同的硬件操作
recvfrom(cmd)
if(cmd == LED_ON)
open("/dev/leds",...)
ioctl(fd, LED_ON, 0)
$:' vi leds.c
// 进一步解析命令:操作哪盏灯,如何操作,调用对应灯的对应操作函数
$:' vi leds_hw.c
// hw 代表硬件 hardware,操作硬件
open
ioctl
close
$:' arm-cor.....gcc server.c -o server
$:' cp server rootfs/home/bin/
#:' insmod /home/drivers/leds_drv.ko
#:' source /home/etc/profile
#:' /home/bin/server &
#:' /home/bin/client
启动server
启动client
点击按钮实验是否亮灯
注意编程过程中的调试技巧
#define DEBUG
#ifdef DEBUG
/*##表示如果可变参数被忽略或为空,将使预处理器( preprocessor )去除掉它前面的那个逗号。*/
#define pr_debug(fmt, ...) printf(fmt, ##__VA_ARGS__)
#else
#define pr_debug(fmt, ...)
#endif
BUG的调试,顺着数据流分析该调用的函数是否调用到。
/* leds_drv.c 驱动源代码 */#include <linux/init.h>
#include <linux/module.h>
#include <linux/miscdevice.h>#include <linux/gpio.h>
#include <linux/fs.h>
#include <mach/platform.h>
#include <linux/uaccess.h>MODULE_LICENSE("GPL");#define LED_ON 0x100001
#define LED_OFF 0x100002struct led_desc
{char *name;int gpio;
};struct led_desc leds[]=
{{"led_bedroom", PAD_GPIO_C+12},{"led_saloon", PAD_GPIO_C+7},{"led_kitchen", PAD_GPIO_C+11},{"led_restroom", PAD_GPIO_B+26},
};long leds_ioctl(struct file *file,unsigned int cmd,unsigned long arg)
{//1.定义内核缓冲区int kindex = 0;int ret = 0;int status = 0;//2.拷贝用户缓冲区到内核ret = copy_from_user(&kindex, (int *)arg, 4);//3.解析命令,操作硬件switch(cmd) {case LED_ON:status = 0;break;case LED_OFF:status = 1;break;default:return -EINVAL;}if(kindex>= 0 && kindex <4){gpio_direction_output(leds[kindex].gpio, status);}return 0;
}struct file_operations leds_fops =
{.owner = THIS_MODULE,.unlocked_ioctl = leds_ioctl,
};struct miscdevice leds_misc =
{.minor = MISC_DYNAMIC_MINOR,//自动分配次设备号.name = "leds", //设备文件名称.fops = &leds_fops,
};
int __init leds_drv_init(void)
{int i = 0;for(; i<ARRAY_SIZE(leds); i++){gpio_request(leds[i].gpio, leds[i].name);}misc_register(&leds_misc);return 0;
}
void __exit leds_drv_exit(void)
{int i = 0;misc_deregister(&leds_misc);for(; i<ARRAY_SIZE(leds); i++){gpio_free(leds[i].gpio);}
}
module_init(leds_drv_init);
module_exit(leds_drv_exit);
Ehome:智能家居之led控制系统相关推荐
- 基于STM32单片机的智能家居窗户窗帘控制系统红外遥控proteus仿真原理图PCB
功能: 0.本系统采用STM32F103RCT6作为单片机 1.LCD1602液晶实时显示当前时间/窗帘状态/光照强度 2.支持手动按键/定时/光强检测三种模式控制窗帘 3.'设置'键进入设置界面 4 ...
- 智能家居照明控制系统解决方案
智能家居概念的提出已经有一段时间了,但对其的认识与了解仍然停留在表面,并没有切实将该系统进行实际应用. 智能家居照明控制系统方案,作为建设智能家居的应用控制系统之一,是对灯光效果进行智能控制与管理的系 ...
- c语言智能家居安防系统,智能家居之安防智能控制系统
家是我们的避风港湾,家里藏着的都是我们生命里所有最宝贵的东西.所以家应该是温馨的,温暖的更应该是安全的.最近新出了一部电影<找到你>讲述的是姚晨主演的主角孩子在家里失踪的故事.孩子在家里失 ...
- 远程智能家居ZigBee控制系统
0 引言 智能家居系统(SmartHome)最早源于欧美发达国家,是指以住宅为平台,利用现代计算机网络通讯.自动化控制技术.传感器技术.无线通讯技术.音视频技术,通过社区综合布线.社区局域网.Inte ...
- 基于ZigBee和STM32的智能家居控制系统的设计与实现(五)--终结篇
基于ZigBee和STM32的智能家居控制系统的设计与实现(五)–终结篇 说明 首先祝贺自己顺利的完成了毕业答辩工作,想起整个过程还是挺让自己感动的.最后还被评为优秀毕业设计,虽然并没有什么luan用 ...
- 基于ZigBee和STM32的智能家居控制系统的设计与实现
基于ZigBee和STM32的智能家居控制系统的设计与实现(一) 时间过的好快,已经到了做毕业设计的时候了,本次毕业设计题目是自己选的,为什么做这个?原因很简单,想把自己所学的大部分知识都应用上,虽然 ...
- STM32嵌入式实现智能家居控制系统
本文将讲述如何用STM32嵌入式实现智能家居控制系统,所谓智能就是实时监测自主控制一些因素,如,温度.湿度.光照强度等,当室内光线较暗时自动打开灯,根据光线亮度的不同开灯数量也不同,当室内温度过高时红 ...
- 基于ESP32的智能家居控制系统-微信小程序
一. 课题研究意义.现状及应用分析 1.1课题研究意义及现状 目前,科学技术发展十分迅速,其渗透到各行各业以及生活的方方面面,室内设计和高科技结合便出现了"智能家居".所谓智能家居 ...
- 实现智能家居控制系统
本文将讲述如何用STM32嵌入式实现智能家居控制系统,所谓智能就是实时监测自主控制一些因素,如,温度.湿度.光照强度等,当室内光线较暗时自动打开灯,根据光线亮度的不同开灯数量也不同,当室内温度过高时红 ...
最新文章
- 数据挖掘原理与算法:对森林火灾影响因素的分析
- 基于阿里云 DNS API 实现的 DDNS 工具
- java嵌套类与内部类
- 阿米洛键盘取消win_阿米洛花旦娘静电容V2键盘测评:不止是一把好看的键盘
- 用python画大雄_python制作斗图生成器
- C#坏习惯:通过不好的例子学习如何制作好的代码——第2部分
- js 中的 __proto__
- 航迹推演(Odometry)_由左右轮速度v_l,v_r推导车辆的线速度v,角速度w,运动半径r
- 移动端问题列表及解决方案
- USB学习笔记--USB枚举过程
- 成都拓嘉启远:拼多多如何查看同行转化数据
- 私有化(xx,_x,__xx,__xx__,xx_)
- JAVA经典兔子问题
- QDialog无边框
- 硬件设计22之高速电路设计保险丝的选型
- 虚拟盘可以挂载多个服务器吗,两台云服务器挂载一个云硬盘吗
- 收藏!转型AI工程师必读
- OpenCV - 汽车识别
- 2017年Q1中国服务器市场研究报告
- 结构型模式--Proxy代理模式
热门文章
- Windows下VMware Workstations Pro15.5.0安装dmg镜像(macOS Catalina 10.15虚拟机)
- 史上最全IP正则表达式
- html文字底纹阴影,CSS3 彩虹背景、文字和阴影
- 一个案例弄懂ElasticSearch分词匹配原理和同义词
- 鸿蒙系统车联网,任正非表示鸿蒙系统将首先用于手表、智能8K大屏及车联网
- VS 后期生成事件语法格式
- 【Python】自动化办公-outlook邮箱处理(获取邮箱附件)/通过下载链接自动下载
- ETCD 源码学习--lease(一)
- 全国装配式工程师考试形式及报考条件介绍
- Deepchem构建基于分子指纹的神经网络模型