这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【chronos】树莓派DIY进程 - 更新【实验番外篇】任务四:基于树莓派的网

共41条 4/5 |‹ 1 2 3 4 5 跳转至
菜鸟
2014-09-28 21:00:55     打赏
31楼
共同进步嘛~~我也是调试了好久才通的,还是要多看看DATASHEET啊!

菜鸟
2014-09-28 22:33:33     打赏
32楼

【实验番外篇】任务四:基于树莓派的网络考勤系统及刷卡门禁 - 第二阶段:搭建RPi网络服务器

这部分的搭建我用的还是相对比较热门的LAMP(Linux Apache Mysql PHP)

搭建过程非常简单,网上也有好多教程,我这里就不重复啦~~分享一个教程链接吧!

教程传送门 -->

简单介绍一下流程吧~~

安装Apache --> 安装mysql --> 安装PHP

安装完成后,在浏览器中输入RPi的IP,就可以访问部署在RPi上的网站了~~

当前这个页面只显示了一行“It works”,没有其它内容。。

当然我们也可以注册一个域名来实现通过域名访问。

我在花生壳上注册了一个免费的域名,通过设置路由器的动态DNS及虚拟服务器实现了局域网内通过域名访问,无奈免费的域名目前还无法实现外网访问,域名指向总是不对。。。。如果哪位小伙伴试验成功了,还望不吝赐教 :)

所以,目前先在局域网内实现我的任务吧,对于实用性来说还是没有什么影响的!

这里我简单的移植了一个留言板用来测试PHP,首先要感谢一下“夏日”做出来这么好的留言板~~

这部分内容将来可以作为“未打卡说明”结合审批过程添加到考勤系统中去!

在RPi中网站的目录在: /var/www


来看一下页面效果:



菜鸟
2014-09-30 15:54:56     打赏
33楼

【实验番外篇】任务四:基于树莓派的网络考勤系统及刷卡门禁 - 第三阶段:完善刷卡门禁功能及终端显示功能

这部分内容主要是这次任务的硬件完善及其驱动,是第一阶段的延续,之所以安排到了第三阶段是由于某些元件需要购买,在等待到货的时间里完成了目前的第二阶段 :)

硬件部分除了第一阶段中的RFID模块之外,目前还需要添加驱动门禁电磁锁的继电器模块以及用于显示信息的显示屏。

继电器模块在基础实验】五中已经用到过了,操作非常简单,单引脚控制,低电平触发

RELAY Pin Name
RPi Header Pin Num
wiringPi Pin Num
VCC
#1(3.3v)

IN
#7(GPIO.7)
7
GND
#9(0v)

显示屏部分这次不打算用之前的那块OLED屏幕了,看上去始终都显得有点儿小气,这次改用常规尺寸的LCD12864


这块屏幕是总工给我的,已经有段时间了,一直没用,说是军工企业生产的,看上去用料和做工真的很不错!!布局很紧凑的说~~


背面丝印显示是2005年生产的,有年头了啊,呵呵~~到厂家的网站上找找看,没想到还能找到配套的资料,不容易啊!!

有了引脚定义和时序图,驱动起来应该就不成问题了~~

为了节省RPi本来就不富裕的IO口,还是使用串行方式驱动吧


量了一下屏幕的FFC接口尺寸,应该是标准的1.0mm 20P的,马上到某宝去拍一些元器件回来,搞定接口问题~~

元器件名称
数量
金额
FC压线头2.54mm DC-20P
2个
¥0.48
牛角座2.54mm DC-20P
1个
¥0.20
FFC扁平电缆连接器下接1.0mm 20P
1个
¥0.48
贴片3*3单圈电位器10K
1个
¥0.25
FFC转接板1.0mm 20P to 2.54mm 20P
1个
¥1.20
2651灰排线1.27mm 20P
1米
¥1.50

共计:¥4.11

三天漫长的等待啊~~~~期间完成了第二阶段的内容 :)

到货后马上装起来试试!感觉还不错,挺合适的~~吐槽一下MX2近距离拍照畸变效果让我的梦想碎了一地啊~~


接口问题解决了,接下来就是如何让LCD显示出文字啦!

按照DATASHEET的范例接了一下电路,调整了S/P电阻到串行端,满心欢喜的按照DATASHEET码了一遍时序,结果没有显示。。。。


DATASHEET上说模块有两种电压规格,5V和3.3V的,并且没有说明是否通用,模块上也没有明显标识,所以怀疑是RPi的3.3V与模块不匹配!遂致电厂家客服咨询,一番描述后,确定手上拿的是5V屏,根据对方攻城狮的介绍,可以将模块背面的R9 3.3K分压电阻换成0Ω电阻,从而解决电平问题。不过,背光由于设计原因仍需使用5V驱动,这点问题不大~~


苦于手中没有0Ω电阻,又不想直接用锡跨接,只好借用一下S/P电阻()啦~~然后将PSB引脚接地(S/P电阻拿掉后,由PSB引脚的高低状态确定模块的串行/并行模式

再次运行程序,总算能看到文字啦!

可是新的问题又来了。。。显示对比度非常低,文字颜色很浅,即使将可变电阻调成0Ω,效果依然很浅。。。(正常情况下VO与VR端电阻如果调到0,基本上就是黑屏了)

量了一下VO和VR对地的电压,只有4.2V。。。非常低!!这两个引脚是内部升压电路的输出端,通常倍压输出,利用可调电阻控制LCD驱动电压、调节对比度,一般高于5V后正常显示,当前情况明显是电压不够!!由于这块LCD是由5V屏转过来的,虽然兼容了数据电平,其他电路依然还是按照5V设计的,所以导致驱动电压不足!!

为了提高电压,只好临时调整一下电路了,将负压输出VR悬空,VO直接接到5V上,可调电阻就下岗啦~~显示效果终于正常啦~~


清晰度与可视角度都非常不错~~

一下接线方式:

LCD Pin Num
LCD Pin Name
RPi Header Pin Num
wiringPi Pin Num
说明
1
GND
#34(0v)


2
VCC
#17(3.3v)

逻辑电压
3
VO
#4(5V)

LCD亮度调整,外接电阻端
4
RS(CS)
#38(GPIO.28)
28
片选(串行) 0:禁止 1:允许
5
R/W(SID)
#40(GPIO.29)
29
输入串行数据(串行)
6
E(SCLK)
#36(GPIO.27)
27
输入串行脉冲(串行)
15
PSB
#34(0v)

控制界面 0:串行,1:并行8/4位
19
LK
#34(0v)

背光负极
20
LA
#4(5V)

背光正极
上传一下LCD驱动部分的代码:

/////////////////////////////////////////////////////////////////////
//LCD SPI WIRE		LCD CMD
/////////////////////////////////////////////////////////////////////
#define LCD_CLK		27
#define LCD_RS		28
#define LCD_SID		29

#define PAGE0		0x80
#define PAGE1		0x90
#define PAGE2		0x88
#define PAGE3		0x98
#define DispClr		0x01
#define DispON		0x0C
#define FuncSet		0x30
#define ModeSet		0x06
/////////////////////////////////////////////////////////////////////
//功    能:发送数据到LCD
//参数说明:zdata[IN]:数据
/////////////////////////////////////////////////////////////////////
void sendbyte(unsigned char zdata)
{
	unsigned int i;
	for(i=0; i<8; i++)
	{
		if((zdata << i) & 0x80)
		{
			digitalWrite(LCD_SID, HIGH);
		}
		else 
		{
			digitalWrite(LCD_SID, LOW );
		}
		digitalWrite(LCD_CLK, LOW );
		digitalWrite(LCD_CLK, HIGH);
	}
	delay(0.01);		//延时,实测不加延时容易丢帧
}
/////////////////////////////////////////////////////////////////////
//功    能:写LCD指令
//参数说明:cmd_dat[IN]:指令
/////////////////////////////////////////////////////////////////////
void writeCmd(unsigned char cmd_dat)
{
	sendbyte(0xF8);
	sendbyte(cmd_dat & 0xF0);
	sendbyte((cmd_dat << 4) & 0xF0);
}
/////////////////////////////////////////////////////////////////////
//功    能:写LCD数据
//参数说明:dat_dat[IN]:显示数据
/////////////////////////////////////////////////////////////////////
void writeData(unsigned char dat_dat)
{
	sendbyte(0xFA);
	sendbyte(dat_dat & 0xF0);
	sendbyte((dat_dat << 4) & 0xF0);
}
/////////////////////////////////////////////////////////////////////
//功    能:初始化LCD
//参数说明:无
/////////////////////////////////////////////////////////////////////
void lcdInit()
{  
	pinMode (LCD_RS , OUTPUT);
	pinMode (LCD_SID, OUTPUT);
	pinMode (LCD_CLK, OUTPUT);
	digitalWrite(LCD_RS, HIGH);
	writeCmd(FuncSet);	//Function Set
	delay(1);
	writeCmd(FuncSet);	//Function Set
	delay(1);
	writeCmd(DispON);	//Display ON
	delay(1);
	writeCmd(DispClr);	//Display Clear
	delay(50);
	writeCmd(ModeSet);	//Enter mode set
	delay(50);
}
/////////////////////////////////////////////////////////////////////
//功    能:显示字符串
//参数说明:page[IN]:起始页
//参数说明:column[IN]:起始列 - 0,1,2,3,4,5,6,7
//参数说明:*s[IN]:字符串
/////////////////////////////////////////////////////////////////////
void strDisp(unsigned char page, unsigned char column, unsigned char *s)
{  
	writeCmd(page + column);
	while(*s > 0)
	{ 
		writeData(*s);
		s++;
	}
}

按照DATASHEET中的时序图观察,模块应该也支持RPi的SPI接口,用SPI实际驱动了一下果然也没问题,显示什么的都正常。但是!!接上RC522后,LCD就开始显示乱码,CE0与CE1对调也是同样的效果,貌似片选引脚对LCD已经不起作用了,一屏一屏的乱码显示地非常快,然而RC522却能正常工作。。。无奈下将引脚接回了原来的地方,世界终于安静了~~

不知道大家有没有过类似的遭遇呢。。。

初步怀疑SPI双通道应用中片选(或时序)错误导致的数据传送问题(单独驱动时每个通道都能正常使用),目前不排除LCD使用的3线SPI与4线SPI(全双工)混用时存在的兼容性问题。


上一张完整的照片!!


工程师
2014-10-15 18:35:17     打赏
34楼
这个帖子好,不过12864换成7寸触摸屏不是更好呢

菜鸟
2014-11-16 18:02:36     打赏
35楼
我用香蕉派+罗技C270,实验效果比用树莓派流畅很多,想问人脸侦测ok,如果做识别有好的idea么?

菜鸟
2014-11-19 14:31:28     打赏
36楼

不好意思啊,最近老婆生孩子,又加上创业初期,这个帖子基本上搁置起来了。。。希望上面的内容能够帮到你~~

香蕉派+罗技C270的配置确实要比树莓派的高,流畅度一定不错嘛,人脸识别这块儿我只接触过opencv,这里提供了很好的接口和实例,以及特征库,用起来很方便。目前我做的这部分引伸出来就像是相机的人脸追焦,或是社区网站的照片自动人脸框图,如果做类似于考勤或门禁方向的特征识别,我的思路是可以利用opencv提供的特征库将目标人脸的五官等特征部位截取下来作为备份,用于重新识别过程中的分步细节比较,这样做起来难度应该可以降低~~

以上内容只是头脑中的临时想法,没有实验验证的结论作为支持,不过希望可以帮你拓展一下思路。


菜鸟
2016-02-21 19:31:41     打赏
37楼
楼主你QQ多少,小白最近刚入手2B,想向大神请教

菜鸟
2016-04-05 18:06:51     打赏
38楼

呃呃,楼主我在根据你这个搞门禁系统,但是中间这个命令后出现错误:

用下面的指令SPI

view plaincopy to clipboardprint?
  1. gpio load spi  
错误语句是:

gpio: Unable to load/unload modules as this Pi has the device tree enabled.
  You need to run the raspi-config program (as root) and select the
  modules (SPI or I2C) that you wish to load/unload there and reboot.
  There is more information here:
      https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=97314

虽然不知道我的问题是哪,但是设置选项里头我把spi,i2c和串口选项都打开启用并重启了已经,不知道为何还是不行呢?


菜鸟
2016-04-16 23:30:34     打赏
39楼

菜鸟
2016-04-30 16:33:28     打赏
40楼

今天才看到,主要是学校的毕设额,,问题已经解决了,不过我后来主要参照的是这个网页:

树莓派使用RFID-RC522A读卡器对IC卡进行读写(通过 python) | 七三(现在已经打不开了不知道咋回事)

还有主要是这个:https://www.raspberrypi.org/forums/viewtopic.php?f=37&t=106313里面有一个说是尝试添加/ boot / config.txt 中device_tree_param=spi=on
dtoverlay=spi-bcm2708
这一段解决了虽然具体原因还是不大清楚但已经可以读卡号了。

谢谢楼主回复


共41条 4/5 |‹ 1 2 3 4 5 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]