说明:
a)点菜终端应用程序启动后先调用init()函数建立数据dish.db,然后在数据库中建立三张表用来分别存储所有菜的信息,预点菜信息,提交已点菜信息
b)顾客点击菜系中某一项就会调用initdish()和fill_food()函数进行把输入该菜系的菜的所有信息从数据库中提取出来,并显示在界面上。
c)顾客把要点的菜放到预选菜单列表中就会调用sure()函数把顾客所点的菜填充到预选列表中并插入数据库预选表中。在预菜单列表中,顾客可以对其中的某个菜就行删除,该菜对应的信息业从数据库预选表中删除。
d)顾客把预选菜单的菜提交到后台PC机时,就会调用text_notif_commin()函数把数据库中预选表中的所有菜的信息插入已选菜表中,并把在预选表中的所有信息都清空。同时把提交的菜的ID写到串口上。
酒水模块中各个子模块之间的交互图如图4-5所示: foods_notif_Add_SJ()
图4-5 酒水模块交互图
说明:
a)顾客把想要点的酒水添加入预选列表框中,就会调用foods_notif_Add_SJ(),把所选的酒水信息写到数据库中酒水预选表中。顾客还可以删除酒水预选框中的某一项。
b)顾客在提交所选酒水时就会调用foods_notif_Comin_SJ()把酒水预选表中的信息写到酒水提交表中,同时把酒水预选表中的所有信息清空。
2.ZigBee通信模块软件设计
当顾客想要把所点的菜信息发送到后台PC是可以通过无线设备ZigBee进行发送。ZigBee是通过连接开发板PXA270的串口,以及连接PC机的串口让开发板和PC机进行通信。如下图4-6所示:
ZigBee
PXA270 PC机
图4-6 ZigBee通讯图
点菜终端(PXA270)通过Write()函数把要发送的数据写到串口然后传送给ZigBee设备,ZigBee设备通过技术把数据发送到后台与PC机相连的ZigBee设备上,然后PC机通过Read()函数把ZigBee发送过来的信息(菜的ID)读取出来。
3后台PC机模块软件设计
后台PC主要有两大功能,第一结账功能,第二对餐厅营业情况进行统计。结账功能可以通过顾客发送过来的菜的ID进行查表,然后把其ID对应的菜的信息显示出来。当顾客结账时,可以计算出顾客应付金额,以及打印菜单,以便顾客进行核对。餐厅的营业情况统计通过查询数据库表,该表中存储有这一个月内顾客的点菜信息,以方便对餐厅一个月内的收入和支出进行计算。
4.3 本章小结
在本章中主要从硬件角度以及软件角度论述了基于ZigBee无线点菜系统的硬件设计和软件设计。在硬件设计中只需要通过ZigBee设备把PC机和PXA270连接起来进行通信。在软件上,画出了点菜模块中各个函数功能的交换图,并进行了说明。同时也画出了呼叫酒水模块中所使用的函数之间的交互图,也经行了说明。
5 基于ZigBee无线电子点菜系统实现
5.1无线点菜终端实现
在点菜终端模块的实现中我主要是分为三大模块来实现,分别是嵌入式数据库sqlite安装使用模块,MiniGui安装配置及界面开发模块,PXA270触摸屏模块实现。
5.1.1 SQLite模块实现
1.嵌入式数据库SQLite安装与配置
1) PC机安装配置SQLlite方法
a) 从SQLite官方网站下载SQLite的安装包,进入SQLite所在的目录,用解压命令tar –xvf sqlite* 解压压缩包。
b) 进入sqlite的安装目录,在终端输入./configure命令,如果宿主机Linux系统中没有安装ActiveTcl,那么就会在终端打印出错误信息:/sqlite-3.3.6/src/tclsqlite.c: In function `DbUpdateHandler';/sqlite-3.3.6/src/tclsqlite.c::333:warning : passing arg 3 of ` Tcl_ListObjAppendElement`,makes pointer from integer without a cast...... 其解决办法是在./configure时候加上参数----disable-tcl,使编译器不去检查ActiveTcl。
c) configure完成后就执行make && make install进行安装
为了测试是否安装成功,可以在终端输入命令:sqlite3,当出现如下字样则代表安装已经完成。
SQLite version 3.3.6
Enter ".help" for instructions
sqlite>
2)SQLite交叉编译环境的配置
在配置SQLite交叉编译环境时首先要确保linux系统装有交叉编译工具,在这里使用的是arm-linux-gcc交叉编译工具。配置SQLite交叉编译的方法如下:
a)打开终端在终端分别里输入:export config_BUILD_CC=gcc export config_TARGET_CC=arm-linux-gcc命令(config_TARGET_CC是交叉编译器,config_BUILD_CC是主机编译器)
b)直接运行./configure会出错,错误信息:checking for /usr/include/readline.h... configure: error: cannot check for file existence when cross compiling
c)进入sqlite的安装目录,vi configure 打开configure文件, test "$cross_compiling" = yes && 语句下面的{ (exit 1); exit 1; };}都改为{ (echo 1); echo 1; }; }。
d)在终端执行make && make install 命令进行安装。
默认的安装路径是/usr/local/lib ,如果想改变安装的目录,也可以在./configure的时候加上参数—prefix=”安装路径”。可以通过交叉编译一个调用SQLite3API接口的源程序来测试搭配的SQLite环境是否正确,假设源程序为select.c,则在终端输入:arm-linux-gcc select.c -o -L.libs -lsqlite3 –I /opt/arm-linux/include –L /opt/arm-linux/lib –static(sqlite3的安装目录是/opt/arm-linux,在这里使用的是静态编译).静态编译完成后,把生产的可执行文件放到开发板测试。
2.嵌入式数据库SQLite的使用方法
SQLite可以运行在终端输入SQLlite命令进行对SQLite数据库进行操作。为了查询SQLite命令,可以在终端输入.help命令进行查询。由于SQLite数据库对SQL语言的支持,所以也可以在终端输入SQL语句来操作数据库,例如想在当前目录创建以命为dish.db的数据库,然后在该数据库进行创建一张表名为t的表,接着把数据插入表中,最后查询t表中的数据。实现的办法如下:
sqlite>sqlite3 dish.db
sqlite>Create table t(sno int,name varchar(10));(创建了一张两行两列的名为t的表)
sqlite>Insert into t values(100,’张三’);(在t表中插入了一行数据)
sqlite>Select * from t;(在终端打印出t表的所有信息)
SQLite提供了许多函数接口,编程人员可以直接调用SQLite的函数接口来进行编程。通过调用SQLite的函数接口,可以进行对SQLite数据库进行操作。常用的SQLiteAPI接口如下:
1)sqlite3_open("cdish.db", &db)打开一个名为cdish.db的数据库,如果该数据库不存在怎在当前的目录创建一个名为cdish.db的数据库。
2)sqlite3_close(db)关闭数据库;sqlite3_exec( db , sql , 0 , 0 , &zErrMsg )执行一条SQL语言的函数,参数sql为要执行的SQL语言的操作。
3)sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg )是对表进行查询的函数,它完成的功能是执行sql的查询语言,把查询到的结果放到azResult数组里,可以通过打印字符指针数组result的值开查看是否查询正确,参数nrow,ncolomn分别返回查询到符合条件的行数和列数,zErrMsg为返回错误信息的参数。
4)sqlite3_exec(db,sql,0,0,&errmsg)这个函数的功能是执行一条SQL语句,该语句保存在sql字符指针里。函数的参数说明db 为数据库指针(指向打开的数据库),&errmsg保存错误信息。
3.点菜终端SQLite的实现
在已经配置好的SQLite数据库编译、运行坏境后,调用SQLite提供的函数接口来进行编程。实现点菜终端数据库的步骤如下:
a)设计点菜终端数据表的格式如列数、行数以及每一列的类型。点菜终端的点菜模块中一共建立了三张表:第一张表用来存储所有菜的信息,该表存储有很多不同的菜,每一个菜中都包括该菜所属的菜系、价格、图片、文字描述等信息;第二张表用来存储预选菜的信息;第三张表用来存储顾客已提交菜的信息。三张表之间是通过菜名ID号关联。
b)在呼叫酒水模块中所创建的表和表之间的关系跟点菜模块类似。
c)在MiniGui程序里先调用用init()函数,在该函数里又调用了SQLite提供的函数接口sqlite3_open(“dish.db”,&db)创建了一个名为dish.db的数据库,
d)在成功创建数据库后接着就多次调用SQLite提供的函数接口sqlite3_exec(db, sql , 0 , 0 , &zErrMsg)进行创表和把数据插入表中。
e)调用SQLite提供的API接口来经行数据的插入、删除、修改、查询。
5.1.2 MiniGui模块实现
1 .MiniGui开发环境配置
MiniGui开发环境的配置是整个无线点菜系统中比较重要的一个环节,因为只有搭配好MiniGui编译环境才能正确地编译出能在开发板上运行的程序。MiniGui环境配置包括PC环境的配置和交叉编译链的建立,具体实现步骤如下:
1)MiniGui PC环境的搭配
a).从下载minigui安装文件,主要下载了这几个压缩文件minigui-res-str-1.6.tar.gz,libminigui-str-1.6.2.tar.gz,qvfb-1.0.tar.gz,mg-samples-1.6.10.tar.gz. ,分别是mingui的资源文件,minigui库文件,minigui运行平台qvfb,以及minigui的例子.
b). 解压下载的安装包,进入相应的目录进行安装minigui的库文件和资源文件以及运行平台qvfb,一般都是执行三条命令:./configure && make && make install。在默认的情况下minigui的库文件以及资源文件都是安装在/usr/local/lib目录底下,如果想改变为其他目录也可以再./configure的时候加上参数—prefix=”安装目录的路径”
c).在安装完成后,要在终端vi /etc/ld.so.conf打开文件,在文件最后添加一行 /usr/local/lib 然后:wq 保存推出,然后在终端运行ldconfig命令刷新一下。
为了测试是否安装成功,编译一下MiniGui的实例,然后让它在qvfb上运行(注意在终端开发qvfb后还需在configure里把分辨率配置为640X480),看到运行结果,则证明minigui已经安装成功。编译minigui的命令是(这里以编译helloword.c为例子):在终端输入gcc helloword.c –o helloword –lminigui –ljpeg –lpng –lz –lpthread (参数说明:-lminigui 是连接minigui核心的库函数,-ljpeg ,-lpng 是编译minigui的图片文件要连接的库函数,-lpthread 是提供POSIX兼容的线程支持的库函数,这是编译Minigui—Threads程序时需要的库函数)
2).MiniGui交叉环境建立的步骤如下:
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>