版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
《嵌入式綜合實踐》設(shè)計報告設(shè)計題目:基于RaspberryPiB+的溫度采集、存儲、顯示系統(tǒng)感謝閱讀班級:信息工程2012-04班姓名:陳巖學(xué)號:04121471姓名:陳燦堅學(xué)號:04121470姓名:郭鐳斌學(xué)號:04121474姓名:劉楊學(xué)號:04121494指導(dǎo)教師:李健時間:2015年6月目錄一、 設(shè)計任務(wù) 3二、 設(shè)計方案 3三、設(shè)計原理及內(nèi)容 5(一)樹莓派初始配置 5(二)數(shù)據(jù)的采集 13(三)數(shù)據(jù)的存儲 15(五)數(shù)據(jù)的顯示 20(六)數(shù)據(jù)的修改 26(七)新浪云端應(yīng)用申請創(chuàng)建 27(八)數(shù)據(jù)上傳與云端接收 30(九)本地和云端數(shù)據(jù)庫實現(xiàn)同步刪除與修改 33(十)互聯(lián)網(wǎng)顯示數(shù)據(jù)折線圖 34(十一)Android客戶端 38四、設(shè)計成果 40五、設(shè)計總結(jié) 41六、參考文獻 43附錄1:實踐日志: 44附錄2:源程序,見文件夾 51一、設(shè)計任務(wù)開發(fā)一套基于樹莓派2、及DS18B20溫度傳感器的信息采集存儲顯示系統(tǒng),相關(guān)參數(shù)要求如下:謝謝閱讀1.在Linux下每隔30秒自動采集一次溫濕度信號;感謝閱讀2.使用數(shù)據(jù)庫MySQL在本地存儲8個小時的溫度信號;謝謝閱讀3.使用新浪云的MySQL數(shù)據(jù)庫存儲溫濕度信號;感謝閱讀4.編寫客戶端(PC或Android與網(wǎng)頁形式)訪問數(shù)據(jù)庫實現(xiàn)讀取數(shù)據(jù)、刪除數(shù)據(jù)等操作,并以曲線表方式顯示。感謝閱讀二、設(shè)計方案系統(tǒng)整體框圖如圖2-1所示互聯(lián)網(wǎng)Android終端用戶PCDS18B20路由器…………網(wǎng)線樹莓派圖2-1系統(tǒng)硬件框圖為實現(xiàn)項目設(shè)計要求,本次設(shè)計采用Python、PHP、MySQL、Apache2、HTML等相關(guān)軟件及編程語言進行開發(fā)。感謝閱讀開發(fā)硬件要求:樹莓派B+板一塊、DS18B20溫度傳感器及驅(qū)動板一塊、網(wǎng)線一根、路由器一個、電源設(shè)備。感謝閱讀軟件及編程要求:Python語言、PHP編程語言、Apache2、MySQL語言、MySQL數(shù)據(jù)庫、新浪云SAE環(huán)境,HTML。感謝閱讀本系統(tǒng)采用主要采用Python語言編寫,對DS18B20溫度傳感器進行讀取并感謝閱讀寫入本地MySQL數(shù)據(jù)庫和新浪云數(shù)據(jù)庫。另外在本地利用Python語言編寫客戶端對本地數(shù)據(jù)庫進行讀取并以折線圖形式繪制出溫度記錄變化趨勢圖。利用PHP語言結(jié)合LAMP(Linux+Apache+MySQL+PHP/Python)環(huán)境實現(xiàn)對本地數(shù)據(jù)庫內(nèi)的記錄進行顯示數(shù)值顯示與修改刪除等操作。另外,在新浪云端利用PHP語言編寫程序?qū)Ρ镜厣蟼鲾?shù)據(jù)進行存儲,并結(jié)合HTML技術(shù)實現(xiàn)數(shù)據(jù)的顯示操作,在最終為方便遠程顯示,結(jié)合Android客戶端,實現(xiàn)對新浪云應(yīng)用網(wǎng)頁的固定顯示,達到觀察溫度數(shù)據(jù)變化的目的。謝謝閱讀軟件實現(xiàn)框圖如圖2-2所示。Python語言本地MySQL數(shù)據(jù)庫Python客戶端讀取溫度數(shù)據(jù)折線顯示數(shù)PHP網(wǎng)頁數(shù)值顯據(jù)新浪云PHP指令示、修改、刪除接收指令新浪云PHP語言新浪云PHP網(wǎng)頁折線圖接收溫度數(shù)據(jù)MySQL數(shù)據(jù)庫顯示AndroidHTML+JavascriptWebView控件圖2-2軟件實現(xiàn)框圖三、設(shè)計原理及內(nèi)容(一)樹莓派初始配置1.系統(tǒng)下載登陸/downloads/,點擊DOWNLOADS,下載樹莓派的系統(tǒng)。解壓系統(tǒng)下載完成后,將得到的壓縮文件進行解壓,得到名為“win32diskimager感謝閱讀(鏡像寫U盤工具)”的文件夾。燒寫系統(tǒng)開“win32diskmigager(鏡像寫U盤工具)”文件夾,找到Win32DiskImager.exe可執(zhí)行文件,雙擊運行。感謝閱讀說明:此處最好采用完全版,網(wǎng)上有部分僅有.exe文件,無法使用。謝謝閱讀選擇剛下載的鏡像文件,病選擇目標內(nèi)存卡,點擊“寫”按鈕,等待燒寫完成。精品文檔放心下載硬件搭建SD卡插入樹莓派卡槽,連接網(wǎng)線至路由器接口,并給電源供電。感謝閱讀查看樹莓派IP地址:通過路由管理器查看名為raspberry的IP地址。精品文檔放心下載綁定樹莓派的MAC地址和IP。Putty配置首次登陸需要用SSH,雙擊“putty.exe”文件,在彈出的對話框中輸入主機IP地址:10。精品文檔放心下載7. 安裝遠程桌面在命令窗口中l(wèi)oginas:后輸入pi,輸入密碼:raspberry。精品文檔放心下載輸入sudoapt-getinstallxrdp,安裝遠程桌面。感謝閱讀設(shè)置root用戶及密碼sudopasswd遠程登陸1)利用Windows搜索運行“遠程桌面”。2)在彈出的對話框中輸入計算機IP地址,即樹莓派IP地址:10,點擊“連接”。精品文檔放心下載3)輸入username:root,password:********,點擊“OK”按鈕,出現(xiàn)如下圖所示的界面,隨后進入到樹莓派的遠程桌面。精品文檔放心下載使用SD卡剩余空間方法一:8GBmicroSD在Windows下使用Win32DiskImager下載映像后,在RPi中只感謝閱讀能識別出2.9GB,如下圖所示。通過下面11條命令剩余的空間還原出來:命令解釋:查看當前磁盤大小,總大小只有2.9GB②查看第二分區(qū)的起始地址,后面會用到③使用fdisk操作磁盤④d,刪除分區(qū)⑤2,刪除第二分區(qū)⑥創(chuàng)建一個新分區(qū)⑦創(chuàng)建主分區(qū)⑧分區(qū)2⑨輸入第一次得到的第二分區(qū)起始扇區(qū)⑩最后一個sector,默認即可?將上面的操作寫入分區(qū)表設(shè)置完成需要重啟,sudoreboot。重啟完成,使用df-h查看發(fā)現(xiàn)空間并沒有增大,還需要輸入resize2fs感謝閱讀/dev/mmcblk0p2。等待一會兒操作完成,再次使用df-h查看發(fā)現(xiàn)空間已變大成7.2GB。精品文檔放心下載方法二:輸入命令raspi-config,選擇第一項,回車確認。感謝閱讀配置服務(wù)器環(huán)境(1)安裝ApacheApache可以用下面的命令來安裝:sudoapt-getinstallapache2謝謝閱讀Apache默認路徑是/var/www/,其配置文件路徑為:/etc/apache2/。重啟服精品文檔放心下載務(wù)生效:sudoserviceapache2restart。感謝閱讀(2)安裝mysqlsudoapt-getinstallmysql-server感謝閱讀安裝過程中,會出現(xiàn)一個提示符讓你輸入一個密碼,這個密碼是mysqlroot用戶的密碼。精品文檔放心下載(3)安裝PHP輸入下面的命令,就可以安裝PHP5,以及PHP訪問mysql數(shù)據(jù)庫所需要的庫。謝謝閱讀sudoapt-getinstallphp5sudoapt-getinstallphp5-mysql謝謝閱讀(4)測試裝完成后,可以在連接到樹莓派所在局域網(wǎng)的其他電腦或手機的瀏覽器中輸入樹莓派的IP地址,就可以訪問網(wǎng)站了。此時能看到一個頁面顯示“Itworks”,但是沒有其它內(nèi)容。謝謝閱讀創(chuàng)建一個/var/www/index.php。(二)數(shù)據(jù)的采集由于樹莓派操作系統(tǒng)Dccidentalis和2012年12月以后Raspbian系統(tǒng)已經(jīng)能夠支持DS18B20單總線(1-wire)溫度傳感器。DS18B20溫度傳感器是由半導(dǎo)體包裝的頭和三個引腳組成的一種精確的數(shù)字設(shè)備。精品文檔放心下載硬件部分溫濕度傳感器的硬件部分包括:樹莓派開發(fā)板,DS18B20傳感器,杜邦線3精品文檔放心下載根。接線:VCC接5V的GPIO接口GND接GND的GPIO接口DQ接GPIO18的GPIO接口軟件部分:本次項目設(shè)計選用Python語言操作GPIO口,可簡化程序結(jié)構(gòu),方便后面的數(shù)據(jù)存儲顯示以及程數(shù)據(jù)的上傳功能的實(1)修改Config.txt配置文件:謝謝閱讀由于升級后的內(nèi)核,為防止GPIO沖突,使用了新的dt策略,可能找不到28-精品文檔放心下載***文件夾,所以通過修改 Config.txt配置文件解決這個問題,修改如下:精品文檔放心下載boot/config.txt配置文件的最后添加:dtoverlay=w1-gpio-pullup,gpiopin=18(根據(jù)謝謝閱讀自己實際接的管腳而定)。(2)安裝單總線驅(qū)動:/timofurrer/w1thermsensor網(wǎng)站下載單總線設(shè)備驅(qū)動壓縮包并解壓(在Linux下可用unzip命令解壓zip壓縮包)安裝。謝謝閱讀(3)升級內(nèi)核(如果已經(jīng)升級過可直接逃過此步):apt-getupdataapt-getupgrade(4)確認設(shè)備生效:生效后可找到28-*****的文件夾精品文檔放心下載sudomodprobew1-gpiosudomodprobew1-thermcd/sys/bus/w1/devices/ls(5)查看當前溫度:cd28-****(此為ls查看的文件夾,各個DS18B20設(shè)備有自己的設(shè)備號)感謝閱讀catw1_slave(t/1000即為當前溫度值)感謝閱讀(6)測試成功后,編寫連續(xù)監(jiān)測程序,采用Python語言操作GPIO:感謝閱讀importglobimporttimedevice_folder=glob.glob('/sys/bus/w1/devices/'+'28*')[0]device_file=device_folder+'/w1_slave'defread_temp():感謝閱讀f=open(device_file,'r')感謝閱讀lines=f.readlines()f.close()equals=lines[1].find('t=')謝謝閱讀temp_string=lines[1][equals+2:]謝謝閱讀temperature=float(temp_string)/1000.0精品文檔放心下載returntemperaturewhileTrue:print(‘Currenttemperature:%.2f’%read_temp())感謝閱讀time.sleep(1)(三)數(shù)據(jù)的存儲1.MySQL簡介(1)數(shù)據(jù)在數(shù)據(jù)庫中的存儲方式:表中的一行稱之為一條記錄,表中的一條記錄對應(yīng)一個對象的數(shù)據(jù)。感謝閱讀(2)常用操作的實現(xiàn)1)數(shù)據(jù)庫操作創(chuàng)建數(shù)據(jù)庫:createdatabase[ifnotexeits]db_name查看、刪除數(shù)據(jù)庫:謝謝閱讀顯示數(shù)據(jù)庫語句:showdatabases顯示數(shù)據(jù)庫創(chuàng)建語句:showcreatedatabasesdb_name精品文檔放心下載數(shù)據(jù)庫刪除語句:dropdatebase[ifexeits]db_name感謝閱讀修改、備份、回復(fù)數(shù)據(jù)庫:alterdatabase[ifnotexeits]db_name2)表操作精品文檔放心下載創(chuàng)建表:creattabletable_name(field1datatype,field2datatype,field3datatype),其中,field指定列名,datatype指定列類型。謝謝閱讀修改表:使用altertable語句追加、修改或刪除列。感謝閱讀3)數(shù)據(jù)庫CRUD語句Insert語句(增加數(shù)據(jù)):使用insert語句向表中插入數(shù)據(jù)。感謝閱讀insertintotable[(column[,column…])] values(value[,value])感謝閱讀Update語句(更新數(shù)據(jù)):使用update語句修改表中數(shù)據(jù)。謝謝閱讀UPDATEtb1_nameSETcol_name1=expr1[,col_name2=expr2...]謝謝閱讀[WHEREwhere_definition]UPDATE語法可以用新值更新原有表行中的各列。SET子句指示要修改哪些列和要給予哪些值。WHERE子句指定應(yīng)更新哪些行。感謝閱讀如果沒有WHERE子句,則更新所有的行。Delete語句(刪除數(shù)據(jù)):使用delete語句刪除表中數(shù)據(jù)。精品文檔放心下載deletefromtb1_name[WHEREwhere_definition]感謝閱讀Select語句(查找數(shù)據(jù)):select[distinct]*|{column1,column2,column3…}from感謝閱讀table具體實現(xiàn)總體方案:在數(shù)據(jù)存儲方面,為了保持數(shù)據(jù)的連續(xù)更新,且選定存儲8個小時的溫度數(shù)據(jù)內(nèi)容,并方便后面顯示繪圖與數(shù)據(jù)的修改功能,將數(shù)據(jù)表創(chuàng)建為以下格式:分三列id、time、temp。分別存放序號、時間和溫度,其中序號由自己指定,本項目中由于溫度需30s采集一次,連續(xù)采集8小時數(shù)據(jù),故最多可保持960條數(shù)據(jù)記錄,所以將id設(shè)為從1-960,并置為索引,可自由修改,屬性設(shè)置為INT型即可;time內(nèi)容由系統(tǒng)自動存入,類型設(shè)為TIMESTAMP;temp就存儲讀取的溫度數(shù)據(jù)。感謝閱讀數(shù)據(jù)更新方案:數(shù)據(jù)庫能夠?qū)⒕幪?、采集時間(由系統(tǒng)自行寫入)和溫度值保存成一條紀錄,共能存儲8個小時的溫度信息,即960條記錄,編號從1到960。再采集到新的溫度值,編號設(shè)為961,并存入到表中。再將編號為1的記錄用delete語句刪除,最后將所有記錄的編號減一,這樣便實現(xiàn)了數(shù)據(jù)的更新,類似于DSP中的滑窗形式存儲數(shù)據(jù),原理如圖數(shù)據(jù)記錄更新原理圖。精品文檔放心下載圖數(shù)據(jù)記錄更新原理圖(1)登陸數(shù)據(jù)庫:在終端輸入命令行:mysql -uroot -p;(-p表示輸入的密碼不顯示出來),精品文檔放心下載Enterpassword后面輸入密碼便可登陸到數(shù)據(jù)庫。查看已有數(shù)據(jù)庫:精品文檔放心下載輸入showdatabases命令可以看到如下圖所示的三個默認的數(shù)據(jù)庫。精品文檔放心下載(2)創(chuàng)建新的數(shù)據(jù)庫:輸入命令行:creat
databases
temperature;創(chuàng)建名為temperature的數(shù)據(jù)庫,輸入:show如下圖:精品文檔放心下載
databases;可以查看,界面(3)修改數(shù)據(jù)庫格式:usetemperature;///更改當前要操作的數(shù)據(jù)庫精品文檔放心下載createtabletable1(idINT,timetimestampdefaultcurrent_timestamp,tempdouble);感謝閱讀//創(chuàng)建表,并指定各列屬性showtables; //查看創(chuàng)建的表insertintotable1(id,temp)values(1,23.57);//插入一條記錄select*fromtable1;//查看表中所有記錄感謝閱讀如果上面建表是僅指定time屬性為timestamp,在這里要執(zhí)行一次指令:謝謝閱讀ALTERTABLEtable1MODIFYtimeTIMESTAMPDEFAULTCURRENT_TIMESTAMP;謝謝閱讀這樣可防止后面更新數(shù)據(jù)時時間數(shù)據(jù)跟著發(fā)生變化。(4)利用Python操作數(shù)據(jù)庫進行數(shù)據(jù)存儲在利用Python語言進行數(shù)據(jù)庫的操作需要安裝MySQLdb模塊并在程序中導(dǎo)入才能夠?qū)?shù)據(jù)庫進行操作。Python下的Mysql模塊MySQLdb安裝按照如下步驟進行:謝謝閱讀在下載安裝MySQLdb之前需下載安裝setuptools步驟如下感謝閱讀1.下載:在它的官網(wǎng)可以下載到安裝包:/pypi/setuptools謝謝閱讀2.安裝$tar-zxvfsetuptools-0.6c11.tar.gz謝謝閱讀$cdsetuptools-0.6c11$pythonsetup.pyinstall之后可以安裝MySQLdb模塊①下載MySQLforPython安裝1.2.3版本,下載地址為:/projects/mysql-感謝閱讀python/files/mysql-python/1.2.3/MySQL-python-1.2.3.tar.gz感謝閱讀②解壓,一般樹莓派下載下的文件放在Downloads文件夾下,因此需進入其中操作感謝閱讀$cdDownloads$tarzxvfMySQL-python-1.2.3.tar.gz謝謝閱讀③安裝$cdMySQL-python-1.2.3$pythonsetup.pybuild$pythonsetup.pyinstall注:正常情況下在執(zhí)行:pythonsetup.pybuild會遇到以下錯誤:謝謝閱讀EnvironmentError:mysql_confignotfound精品文檔放心下載在這里是因為未找到mysql_config文件位置,這是因為直接使用指令感謝閱讀apt-getinstallmysql-server安裝的MySQL不算完整。在這里可按照下面步驟:謝謝閱讀$sudoapt-getinstalllibmysqlclient-dev 之后查找mysql_config的位置,使用謝謝閱讀find/-namemysql_config 這里我們的系統(tǒng)中該文件路徑為:謝謝閱讀/usr/bin/mysql_config修改setup_posix.py文件,在26行:感謝閱讀mysql_config.path=“mysql_config”修改為:感謝閱讀mysql_config.path=“/usr/bin/mysql_config”感謝閱讀保存后,然后再次執(zhí)行:pythonsetup.pybuildpythonsetup.pyinstall這樣就完成了MySQLdb模塊的安裝。完成之后即可利用Python語言程序?qū)?shù)據(jù)庫進行相關(guān)操作,在這一部分我們僅需要數(shù)據(jù)的存儲,在這里需要用到數(shù)據(jù)插入與數(shù)據(jù)的刪除與更新。謝謝閱讀db=MySQLdb.connect("localhost","root","041471","temperature")//鏈接數(shù)據(jù)庫感謝閱讀cursor=db.cursor() //獲取游標cursor.execute("showtables")精品文檔放心下載cursor.execute("select*fromtable1")//選取表感謝閱讀value=read_temp() //讀取溫度數(shù)據(jù)感謝閱讀sql='insertintotable1(id,temp)values(961,%.2f)'%value//生成插入指令cursor.execute(sql)//執(zhí)行指令謝謝閱讀mit()//確認指令執(zhí)行,執(zhí)行指令之后必須有cursor.execute("updatetable1setid=id-1")//更新記錄,所有id-1精品文檔放心下載mit()db.close() //關(guān)閉數(shù)據(jù)庫time.sleep(15) //延時(五)數(shù)據(jù)的顯示本項目設(shè)計中本地數(shù)據(jù)顯示部分主要利用Python的Tkinter()庫進行繪制折線圖,Tkinter是Python自帶的一款GUI界面編寫庫,不需要額外下載,就可以實現(xiàn)簡單的UI界面顯示操作,Python與Tkinter的結(jié)合提供了一個快速和容易的方法來創(chuàng)建GUI應(yīng)用程序。Tkinter的提供了一個強大的面向?qū)ο蟮慕涌赥k的GUI工具包。另外數(shù)據(jù)顯示需要先對數(shù)據(jù)庫中的數(shù)據(jù)進行讀取。感謝閱讀Python查詢MySQL數(shù)據(jù)(1)方法概述:精品文檔放心下載Python查詢Mysql使用fetchone()方法獲取單條數(shù)據(jù),使用fetchall()方法獲取多條數(shù)據(jù)。感謝閱讀fetchone():該方法獲取下一個查詢結(jié)果集。結(jié)果集是一個對象。謝謝閱讀fetchall():接收全部的返回結(jié)果行.。rowcount:這是一個只讀屬性,并返回執(zhí)行execute()方法后影響的行數(shù)。(2)所用代碼:感謝閱讀打開數(shù)據(jù)庫連接db=MySQLdb.connect("localhost","testuser","test123","TESTDB")謝謝閱讀使用cursor()方法獲取操作游標cursor=db.cursor()SQL查詢語句sql="SELECT*FROMtb_name謝謝閱讀執(zhí)行SQL語句cursor.execute(sql)獲取所有記錄列表results=cursor.fetchall()感謝閱讀forrowinresults:id=row[0]time=row[1]temp=row[2]關(guān)閉數(shù)據(jù)庫連接db.close()本地顯示客戶端編寫1)Tkinter簡介為簡化并優(yōu)化系統(tǒng),在本地折線顯示溫度記錄采用Python編寫客戶端方式,主要基于PythonTkinterUI編寫庫,實現(xiàn)對溫度記錄的讀取與顯示。PythonTkinter用法謝謝閱讀使用Tkinter創(chuàng)建一個GUI應(yīng)用程序步驟如下:謝謝閱讀導(dǎo)入Tkinter模塊創(chuàng)建GUI應(yīng)用程序的主窗口添加上述部件之一或更多的GUI應(yīng)用程序進入主事件循環(huán)的由用戶觸發(fā)每個事件響應(yīng)本次使用Tkinter主要目的是構(gòu)建一個溫度讀取顯示界面,要求為折線顯示,故最好選擇能夠繪制線段的模塊。感謝閱讀Tkinter的提供各種控件,如按鈕,標簽和文本框,一個GUI應(yīng)用程序中使用。這些控件通常被稱為部件。感謝閱讀目前有15種Tkinter的部件,具體描述見表3-1。感謝閱讀表3-1 Tkinter部件簡介Operator DescriptionButton TheButtonwidgetisusedtodisplaybuttonsinyourapplication.謝謝閱讀Canvas TheCanvaswidgetisusedtodrawshapes,suchaslines,ovals,polygons,andrectangles,inyourapplication.謝謝閱讀Checkbutton TheCheckbuttonwidgetisusedtodisplayanumberofoptionsascheckboxes.Theusercanselectmultipleoptionsatatime.精品文檔放心下載Entry TheEntrywidgetisusedtodisplayasingle-linetextfieldforacceptingvaluesfromauser.感謝閱讀Frame TheFramewidgetisusedasacontainerwidgettoorganizeotherwidgets.謝謝閱讀Label TheLabelwidgetisusedtoprovideasingle-linecaptionforotherwidgets.Itcanalsocontainimages.謝謝閱讀Listbox TheListboxwidgetisusedtoprovidealistofoptions謝謝閱讀toauser.Menubutton TheMenubuttonwidgetisusedtodisplaymenusinyourapplication.精品文檔放心下載Menu TheMenuwidgetisusedtoprovidevariouscommandstoauser.ThesecommandsarecontainedinsideMenubutton.精品文檔放心下載Message TheMessagewidgetisusedtodisplaymultilinetextfieldsforacceptingvaluesfromauser.精品文檔放心下載Radiobutton TheRadiobuttonwidgetisusedtodisplayanumberofoptionsasradiobuttons.Theusercanselectonlyoneoptionatatime.感謝閱讀Scale TheScalewidgetisusedtoprovideasliderwidget.謝謝閱讀Scrollbar TheScrollbarwidgetisusedtoaddscrollingcapabilitytovariouswidgets,suchaslistboxes.謝謝閱讀Text TheTextwidgetisusedtodisplaytextinmultiplelines.謝謝閱讀Toplevel TheToplevelwidgetisusedtoprovideaseparatewindowcontainer.感謝閱讀Spinbox TheSpinboxwidgetisavariantofthestandardTkinterEntrywidget,whichcanbeusedtoselectfromafixednumberofvalues.感謝閱讀PanedWindow APanedWindowisacontainerwidgetthatmaycontainanynumberofpanes,arrangedhorizontallyorvertically.精品文檔放心下載LabelFrame Alabelframeisasimplecontainerwidget.Itsprimarypurposeistoactasaspacerorcontainerforcomplexwindowlayouts.感謝閱讀tkMessageBox Thismoduleisusedtodisplaymessageboxesinyourapplications.精品文檔放心下載另外Tkinter有一些基本的屬性,如大小、顏色、背景等,如Dimensions、Colors、Fonts、Anchors、Reliefstyles、Bitmaps、Cursors等。謝謝閱讀在GUI界面制作過程中還必須注意的一點是界面的布局問題,界面的布局直接影響一個GUI界面的直觀效果,在Tkinter中布局有以下幾種方法:謝謝閱讀①pack布局這種布局極為簡單直接使用pack函數(shù)即可,但這種布局僅具有順序性,且布局不固定,對美化來說不好操作,不夠靈活。謝謝閱讀使用pack函數(shù)的時候,默認先使用的放到上面,然后依次向下排,它會給我們的組件一個自認為合適的位置和大小,這是默認方式,也是我們上面一直采用的方式。pack函數(shù)也可以接受幾個參數(shù):感謝閱讀side參數(shù)指定了它??吭谀膫€方向,可以為LEFT,TOP,RIGHT,BOTTOM,分別代表左,上,右,下;謝謝閱讀fill參數(shù)可以是X,Y,BOTH和NONE,即在水平方向填充,豎直方向填充,水平和豎直方向填充和不填充;感謝閱讀expand參數(shù)可以是YES和NO,它的anchor參數(shù)可以是N,E,S,W(這里的NESW分別表示北東南西,這里分別表示上右下左)以及他們的組合或者是CENTER(表示中間);精品文檔放心下載ipadx表示的是內(nèi)邊距的x方向,它的ipady表示的是內(nèi)邊距的y方向,padx表示的是外邊距的x方向,pady表示的是外邊距的y方向。精品文檔放心下載②grid布局grid可以理解為網(wǎng)格,或者表格,它可以把界面設(shè)置為幾行幾列的網(wǎng)格,我們在網(wǎng)格里插入我們想要的元素。這種布局的好處是不管我們?nèi)绾瓮蟿哟翱?,相對位置是不會變化的,而且這種布局也謝謝閱讀由于我們的程序大多數(shù)都是矩形,因此特別適合于網(wǎng)格布局,也就是grid布局。使用grid布局的時候,我們使用grid函數(shù),在里面指定兩個參數(shù),用row表示行,用column表示列,其中值得注意的是row和column的編號都從0開始。grid函數(shù)還有個sticky參數(shù),它可以用N,E,S,W表示上右下左,它決定了這個組件是從哪個方向開始的,下面的例子可以很好的解釋這一點。grid布局直接用后面的行和列的數(shù)字來指定了它位于哪個位置,而不必使用其他參數(shù)。.grid函數(shù)也支持諸如ipadx,ipady,padx,pady,它們的意思和pack函數(shù)是一樣的,默認邊距是0。它還支持參數(shù)比如rowspan,表示跨越的行數(shù),columnspan表示跨越的列數(shù)。精品文檔放心下載③place布局它直接使用死板的位置坐標來布局,這樣做的最大的問題在于當我們向窗口添加一個新部件的時候,又得重新測一遍數(shù)據(jù),且我們不能隨便地變大或者縮小窗口,否則,可能會導(dǎo)致混亂。Place布局較為復(fù)雜,不容易理解。感謝閱讀2)界面編寫在本次設(shè)計中為方便靈活布局,采用grid布局形式對界面進行布局操作。謝謝閱讀界面布局包含圖形顯示及數(shù)值顯示兩部分內(nèi)容。圖形顯示:使用Tkinter中的Canvas空間生成畫布,并在此基礎(chǔ)上繪制所需圖形,本項目中需顯示一個基本的溫度--時間的坐標軸及坐標值,并顯示連續(xù)數(shù)據(jù)所構(gòu)成的折線圖,在此過程中須對圖形布局及尺寸關(guān)系有清晰的認識。感謝閱讀本項目中存儲8個小時的數(shù)據(jù),每30s采集一次數(shù)據(jù),故共需要960條數(shù)據(jù)記錄,按照本地正常氣溫值評估最低溫度取-20℃,最高溫度取50℃,橫向時間坐標值應(yīng)分為960個,另外為了美觀考慮上下左右需留出一部分空白區(qū)域。謝謝閱讀另外數(shù)據(jù)顯示區(qū)域目的是顯示數(shù)據(jù)庫中最新數(shù)據(jù)記錄因此需要定時進行更新一次,在這里我們采用Label標簽顯示。感謝閱讀折線圖繪制:坐標確定:為了此處方便繪制曲線已經(jīng)將數(shù)據(jù)庫中內(nèi)容存儲時按照時間排序,且間隔時間相等,所以為了方便計算采用id索引值來確定x時間軸坐標值計算如下:精品文檔放心下載=(960)×( ? ? )+感謝閱讀溫度值坐標確定同樣原理,以0℃為基準坐標值,根據(jù)實際值相加減比例,另外由于繪圖時坐標是從左上角開始故溫度高的在圖形上側(cè)坐標值小,溫度低的再圖形上側(cè),坐標值大,計算公式如下:精品文檔放心下載=?+(???)×5?()×(???)770主要程序:GUI界面最終效果圖如下:(六)數(shù)據(jù)的修改1.設(shè)計思路在修改數(shù)據(jù)方面我們更趨向于簡單且并非常用功能,所以我們采用PHP編寫網(wǎng)頁配合Apache2服務(wù)器進行,在所屬局域網(wǎng)內(nèi)的其他終端通過瀏覽器進行。感謝閱讀2.PHP操作數(shù)據(jù)庫簡介1)數(shù)據(jù)庫鏈接在我們訪問MySQL數(shù)據(jù)庫前,我們需要先連接到數(shù)據(jù)庫服務(wù)器,下面是一個用PHP語言鏈接MYSQL數(shù)據(jù)庫的語句:謝謝閱讀$con=mysql_connect('localhost','root','041471');感謝閱讀mysql_select_db('temperature');//選擇數(shù)據(jù)庫謝謝閱讀2)數(shù)據(jù)庫指令執(zhí)行PHP和數(shù)據(jù)庫建立鏈接之后對數(shù)據(jù)庫的操作大部份都是通過mysql_query()來實現(xiàn)的,通過該函數(shù)來傳遞MySQL指令即可完成預(yù)期操作,如下精品文檔放心下載$insertsql="deletefromtable1whereid=$a[$i]";精品文檔放心下載mysql_query($insertsql);這兩條語句即可完成刪除table1表中id=$a[$i]記錄的功能,其中利用第一句是方便于實現(xiàn)語句中含有變量的操作。謝謝閱讀3)數(shù)據(jù)庫內(nèi)容獲取PHP數(shù)據(jù)庫內(nèi)容獲取主要通過如下兩條語句完成$query=mysql_query("select*fromtable1");感謝閱讀$row=mysql_fetch_row($query)感謝閱讀3.設(shè)計目標本次設(shè)計目標是設(shè)計一個界面實現(xiàn)數(shù)據(jù)庫內(nèi)容顯示,并在每條數(shù)據(jù)之后有修改與刪除選項,點擊修改后可彈出界面對這條數(shù)據(jù)內(nèi)容進行修改,確認修改后可以將數(shù)據(jù)庫內(nèi)容修改,點擊刪除可直接將該條記錄刪除。精品文檔放心下載具體內(nèi)容見代碼。4.設(shè)計結(jié)果總體的設(shè)計結(jié)果是,960條數(shù)據(jù)分為兩個網(wǎng)頁現(xiàn)實。第一頁顯示1—500條,第二個頁面顯示501-960條。通過“上一頁”和“下一頁”的超鏈接可以進行互相切換。精品文檔放心下載然后,每條數(shù)據(jù)都有修改和刪除的兩個功能,點擊刪除,則會刪除該條數(shù)據(jù)。同時會上傳一條刪除語句給新浪云端的PHP文件,然后新浪云也執(zhí)行這條刪除語句,刪除對應(yīng)的數(shù)據(jù)。點擊修改,則會彈出修改數(shù)據(jù)的網(wǎng)頁。如下:感謝閱讀修改成功后則返回原始網(wǎng)頁,如果修改的是第1-500條,則返回第一頁的網(wǎng)頁;如果修改的是第501-960條,則返回的是第二頁。謝謝閱讀(七)新浪云端應(yīng)用申請創(chuàng)建登陸新浪云控制臺,點擊“創(chuàng)建新應(yīng)用”。出現(xiàn)如下界面,點擊“繼續(xù)創(chuàng)建”。為自己創(chuàng)建的App設(shè)置二級域名(Appname)和應(yīng)用名稱,選擇開發(fā)語言為PHP5.3。謝謝閱讀完成以上設(shè)置后,選擇“PHP空應(yīng)用”,創(chuàng)建應(yīng)用??吹饺缦聢D所示的界面,表面創(chuàng)建成功。點擊進入創(chuàng)建的應(yīng)用進入控制臺,選擇界面左側(cè)“服務(wù)管理”菜單下的“MySQL”選項,出現(xiàn)如下界面。感謝閱讀初始化MylSAM,提示進行安全登陸。安全驗證完成后,出現(xiàn)如下界面。點擊“管理MySQL”,可以管理數(shù)據(jù)庫。選擇控制臺左側(cè)“應(yīng)用管理”菜單下的“代碼管理”,創(chuàng)建版本。謝謝閱讀輸入版本號,創(chuàng)建版本。版本創(chuàng)建完成后,點擊“編輯代碼”進入代碼編輯界面。(八)數(shù)據(jù)上傳與云端接收本地數(shù)據(jù)上傳同數(shù)據(jù)讀取一起進行,模擬httpPOST進行傳輸,需要用到urllib和urllib兩個模塊,這兩個模塊樹莓派系統(tǒng)的Python里面已經(jīng)包含可直接使用,若沒有可以感謝閱讀$sudoapt-getinstallpython-dev精品文檔放心下載1.新浪云服務(wù)端編寫在新浪云作為服務(wù)器端使用的是PHP編寫,由于每次僅傳輸一次數(shù)據(jù),且由感謝閱讀于新浪云端不支持socket通信機制,所以最簡單的數(shù)據(jù)傳輸方式采用類似于表單的POST方式,在新浪云端建立服務(wù)器端,用來接收本地客戶端POST過去的數(shù)據(jù),并對數(shù)據(jù)進行提取,并寫入新浪云的MySQL數(shù)據(jù)庫,在這一步驟中最難的是要要打通http通道,因為一般的表單POST采用的是C/S模式,本地通過瀏覽器訪問服務(wù)器端的網(wǎng)頁,填寫網(wǎng)頁中的表單再提交,這種模式下,該網(wǎng)頁地址與服務(wù)界面地址相對處于同一物理路徑,均在服務(wù)器上,較容易定位,而本次所需要用到的模式下,客戶端與服務(wù)界面處于不同物理服務(wù)器上,因此需通過http協(xié)議來進行數(shù)據(jù)傳輸。謝謝閱讀首先需在服務(wù)器端建立服務(wù)界面,再確定是否能夠打通通道,可利用以下在線測試工具:謝謝閱讀/httptest.php謝謝閱讀在這里需注意,新浪云通過域名地址進行數(shù)據(jù)傳輸需在應(yīng)用地址前加“1.”如本次創(chuàng)建的應(yīng)用地址為測試界面為其下精品文檔放心下載test.php<?phpheader("Content-type:charset=utf-8;");$id=$_POST['id'];$time=$_POST['time'];$temp=$_POST['temp'];精品文檔放心下載echo$id.'</br>'.$time.'</br>'.$temp.'</br>';?>感謝閱讀有數(shù)據(jù)返回即通信成功,在本項目的數(shù)據(jù)傳輸中,新浪云端主要功能為數(shù)據(jù)接收與寫入,并更新數(shù)據(jù)庫信息,代碼如下:謝謝閱讀<?phpheader("Content-type:charset=utf-8;");//測試時方便正確顯示謝謝閱讀$id=$_POST['id']; //變量分配接收到的參數(shù)感謝閱讀$time=$_POST['time'];$temp=$_POST['temp'];if($id) //如果接收到的數(shù)據(jù)不為空則進行下面的操作精品文檔放心下載{$con=mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);//數(shù)據(jù)庫建立連接,新浪云默認方法精品文檔放心下載mysql_select_db('app_chyan041471');//選擇數(shù)據(jù)庫$query=mysql_query('select*fromtemperature');謝謝閱讀$insertin="insertintotemperature(id,temp)values($id,$temp)";精品文檔放心下載if(mysql_query($insertin)) //如果數(shù)據(jù)庫數(shù)據(jù)插入成功則進行下面的精品文檔放心下載更新操作{if(mysql_query('deletefromtemperaturewhereid=1'))謝謝閱讀echo"yes";elseecho"error";if(mysql_query('updatetemperaturesetid=id-1'))謝謝閱讀echo"yes";elseecho"error";}}?>3.Python模擬httppost向新浪云傳遞數(shù)據(jù)感謝閱讀樹莓派本地客戶端進行數(shù)據(jù)傳輸,主要利用urllib和urllib2兩個庫,這部分代碼較為簡單可直接使用,所用代碼為:精品文檔放心下載importurllibimporturllib2url='http://1./link.php'post_data={'id':'961','temp':'%.2f'%value}精品文檔放心下載data=urllib.urlencode(post_data)精品文檔放心下載req=urllib2.Request(url,data)精品文檔放心下載在這里需要注意地址的正確性,與所需傳遞數(shù)據(jù)格式(九)本地和云端數(shù)據(jù)庫實現(xiàn)同步刪除與修改為實現(xiàn)數(shù)據(jù)內(nèi)容的更好同步,兩個數(shù)據(jù)庫內(nèi)容要實現(xiàn)同步刪除與修改,這里采用PHP在修改本地數(shù)據(jù)的同時能夠完成云端數(shù)據(jù)庫內(nèi)容的同步修改,具體方案與數(shù)據(jù)上傳相類似,在本地修改數(shù)據(jù)傳遞指令的同時由云端數(shù)據(jù)庫的結(jié)構(gòu)生成相對應(yīng)的MySQL操作代碼,并通過httpPOST上傳至云端服務(wù)器某個處理界面,由處理界面接收解析,并連接操作云端數(shù)據(jù)庫,過程如下:感謝閱讀1.云端建立處理PHP文件具體建立步驟與數(shù)據(jù)上傳時相同,主要程序:<?phpheader("Content-type:charset=utf-8;");謝謝閱讀if($command=$_POST['command']){精品文檔放心下載$con=mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);精品文檔放心下載mysql_select_db('app_chyan041471');精品文檔放心下載$query=mysql_query('select*fromtemperature');謝謝閱讀if(mysql_query($command))echo"yes";elseecho"no";}?>其中command為接收到的MySQL操作指令。精品文檔放心下載2.給新浪云端的PHP文件上傳操作指令通過PHP進行httpPOST數(shù)據(jù)需要對本地進行curl擴展庫安裝:感謝閱讀在這一步完成后即可完成上述要求。程序如下:$url="http://1./test.php";$post_data=array(感謝閱讀"command"=>"deletefromtemperaturewhereid=$id"http://也可為對應(yīng)的修改精品文檔放心下載指令);$ch=curl_init();curl_setopt($ch,CURLOPT_URL,$url);謝謝閱讀curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);謝謝閱讀我們在POST數(shù)據(jù)哦!curl_setopt($ch,CURLOPT_POST,1);精品文檔放心下載把post的變量加上curl_setopt($ch,CURLOPT_POSTFIELDS,$post_data);精品文檔放心下載$output=curl_exec($ch);curl_close($ch);(十)互聯(lián)網(wǎng)顯示數(shù)據(jù)折線圖為了數(shù)據(jù)顯示方便,在新浪云端編寫顯示界面,并定時進行更新顯示,數(shù)據(jù)顯示需要繪制折線圖形。謝謝閱讀PHP中圖形繪制利用其GD擴展庫,GD庫是PHP處理圖形的擴展庫,GD庫提供了一系列用來處理圖片的API,使用GD庫可以處理圖片或者生成圖片。在網(wǎng)站上GD庫通常用來生成縮略圖、對圖片加水印或者對網(wǎng)站數(shù)據(jù)生成報表。GD為是一個動態(tài)的開放的創(chuàng)建圖像的源代碼公開的函數(shù)庫??梢詮墓俜骄W(wǎng)站/gd處下載,目前GD庫支持gif,png,jpeg,wbmp,xbm等多種圖像格式。GD庫通常用于對圖像的處理。謝謝閱讀在本項目中,主要利用GD庫的繪圖功能來繪制數(shù)據(jù)折線圖,在新浪云中,PHP內(nèi)已經(jīng)集成安裝了GD庫不需要額外安裝,如果在樹莓派上需要使用,不需要按上述下載安裝,因為這種方法較為復(fù)雜,可直接使用apt-get來獲取并安裝,指令為:sudoapt-getinstallphp5-gd。謝謝閱讀PHP-GD庫主要函數(shù)及使用方法如下:imagecreate($kuan,$gao)創(chuàng)建圖像,指定大??;Imagecolorallocate()創(chuàng)建顏色,由RGB三個顏色元素組成;謝謝閱讀Imageline()繪制線段,指定起始點和結(jié)束點坐標值,并設(shè)置相關(guān)屬性如顏色、寬度等;精品文檔放心下載Imagestring()在圖片中某一指定坐標添加文字,只可以是英文和數(shù)字。感謝閱讀新浪云端該界面編寫主要程序及效果<?phpheader("Content-type:charset=utf-8;image/gif");感謝閱讀$con=mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);感謝閱讀mysql_select_db('app_chyan041471');謝謝閱讀$gao=370;$kuan=650;$im=@imagecreate($kuan,$gao)謝謝閱讀ordie("CannotInitializenewGDimagestream");感謝閱讀$zuo=30;//空白$you=20;$shang=30;$xia=20;$background_color=imagecolorallocate($im,150,150,150);//設(shè)定各種顏色值謝謝閱讀$zuobiao_color=imagecolorallocate($im,0,200,0);感謝閱讀$zuobiao2_color=imagecolorallocate($im,0,100,0);感謝閱讀$xian_color=imagecolorallocate($im,255,0,0);感謝閱讀$text_color=imagecolorallocate($im,255,255,0);謝謝閱讀$line_color=imagecolorallocate($im,255,50,50);謝謝閱讀ImageTTFText($im,15,0,$kuan/3.5,20,$text_color,"font/simfang.ttf","實精品文檔放心下載時溫度顯示系統(tǒng)");//顯示中文ImageTTFText($im,12,0,$zuo+5,$shang+15,$text_color,"font/simfang.ttf"感謝閱讀,"溫度"); //zuobiaoImageTTFText($im,12,0,$kuan-55,$shang+($gao-$shang-$xia)*4/6-感謝閱讀6,$text_color,"font/simfang.ttf","時間");感謝閱讀ImageTTFText($im,12,0,$kuan/3*2,25,$text_color,"font/simfang.ttf","感謝閱讀最新記錄:");ImageTTFText($im,12,0,$kuan/6*5-謝謝閱讀10,55,$text_color,"font/simfang.ttf","℃");感謝閱讀//繪制坐標軸橫軸imageline($im,$zuo,$shang+($gao-$shang-$xia)*4/6,$kuan-謝謝閱讀$you,$shang+($gao-$shang-$xia)*4/6,$zuobiao_color);精品文檔放心下載imageline($im,$zuo,$shang+($gao-$shang-$xia)*4/6-1,$kuan-謝謝閱讀$you,$shang+($gao-$shang-$xia)*4/6-1,$zuobiao_color);精品文檔放心下載//繪制坐標軸縱軸imageline($im,$zuo,$shang,$zuo,$gao-$xia,$zuobiao_color);感謝閱讀imageline($im,$zuo-1,$shang,$zuo-1,$gao-$xia,$zuobiao_color);謝謝閱讀imageline($im,$kuan-$you,$shang,$kuan-$you,$gao-$xia,$zuobiao_color);精品文檔放心下載imageline($im,$kuan-$you+1,$shang,$kuan-$you+1,$gao-感謝閱讀$xia,$zuobiao_color);//繪制網(wǎng)格imageline($im,$zuo,$shang,$kuan-$you,$shang,$zuobiao_color);imageline($im,$zuo,$shang-1,$kuan-$you,$shang-1,$zuobiao_color);imageline($im,$zuo,$gao-$xia,$kuan-$you,$gao-$xia,$zuobiao_color);imageline($im,$zuo,$gao-$xia+1,$kuan-$you,$gao-$xia+1,$zuobiao_color);imageline($im,$zuo,$shang+($gao-$shang-$xia)*4/6,$kuan-$you,$shang+($gao-$shang-$xia)*4/6,$zuobiao_color);imageline($im,$zuo,$shang+($gao-$shang-$xia)*4/6-1,$kuan-$you,$shang+($gao-$shang-$xia)*4/6-1,$zuobiao_color);imageline($im,$zuo,$shang+($gao-$shang-$xia)*1/6,$kuan-$you,$shang+($gao-$shang-$xia)*1/6,$zuobiao2_color);imageline($im,$zuo,$shang+($gao-$shang-$xia)*2/6,$kuan-$you,$shang+($gao-$shang-$xia)*2/6,$zuobiao2_color);imageline($im,$zuo,$shang+($gao-$shang-$xia)*3/6,$kuan-$you,$shang+($gao-$shang-$xia)*3/6,$zuobiao2_color);imageline($im,$zuo,$shang+($gao-$shang-$xia)*5/6,$kuan-$you,$shang+($gao-$shang-$xia)*5/6,$zuobiao2_color);//刻畫坐標值感謝閱讀imagestring($im,5,$zuo-10,$shang+($gao-$shang-$xia)*4/6-7,"0",$text_color);精品文檔放心下載imagestring($im,5,$zuo-20,$shang+($gao-$shang-$xia)*3/6-7,"10",$text_color);感謝閱讀imagestring($im,5,$zuo-20,$shang+($gao-$shang-$xia)*2/6-7,"20",$text_color);imagestring($im,5,$zuo-20,$shang+($gao-$shang-$xia)*1/6-7,"30",$text_color);imagestring($im,5,$zuo-20,$shang-7,"40",$text_color);imagestring($im,5,$zuo-30,$shang+($gao-$shang-$xia)*5/6-7,"-10",$text_color);imagestring($im,5,$zuo-30,$shang+($gao-$shang-$xia)-7,"-20",$text_color);$length=0;$i=0;$x=array();$y=array();$query=mysql_query('select*fromtemperature');while($row=mysql_fetch_row($query))感謝閱讀{$length=$length+1;$year=$row[1][0]*1000+$row[1][1]*100+$row[1][2]*10+$row[1][3];謝謝閱讀$month=$row[1][5]*10+$row[1][6];謝謝閱讀$day=$row[1][8]*10+$row[1][9];感謝閱讀$hour=$row[1][11]*10+$row[1][12];感謝閱讀$minute=$row[1][14]*10+$row[1][15];感謝閱讀$second=$row[1][17]*10+$row[1][18];謝謝閱讀$t[$i]=$row[1];$x[$i]=$row[0]/960*($kuan-$zuo-$you)+$zuo;//確定x坐標,公式和本地顯示客戶端相同精品文檔放心下載$y[$i]=$shang+($gao-$shang-$xia)*4/6-$row[2]/60*($gao-$shang-$xia);感謝閱讀$temp_d[$i]=$row[2];$i=$i+1;}for($i=1;$i<$length;$i++){imageline($im,$x[$i-1],$y[$i-1],$x[$i],$y[$i],$line_color);謝謝閱讀}imagestring($im,4,$kuan/3*2+50,25,$t[$length-1],$text_color);謝謝閱讀imagestring($im,4,$kuan/3*2+50,40,$temp_d[$length-1],$text_color);imagegif($im);謝謝閱讀imagedestroy($im);?>最終顯示界面如下圖所示:(十一)Android客戶端Android開發(fā)環(huán)境較為復(fù)雜,不是本次項目重點內(nèi)容,這里不做介紹,本次項目開發(fā)過程中使用的是在Ubuntu15.04界面下安裝配置AndroidStudio開發(fā)環(huán)境進行客戶端開發(fā),發(fā)現(xiàn)開發(fā)較為困難,最終結(jié)果為將新浪云網(wǎng)絡(luò)端生成的PHP圖形顯示界面插入本地HTML文件并編寫JavaScript程序進行定時刷新達到實時顯示的目的。精品文檔放心下載主要介紹如何使用WebView控件:創(chuàng)建assets文件夾及自己所要插入的網(wǎng)頁Ubuntu下的AndroidStudio工程打開是沒有asset文件夾的,需要自己創(chuàng)建,路徑:Project_name/app/src/main/下面創(chuàng)建謝謝閱讀圖3.11.1創(chuàng)建asset文件夾及顯示HTML文件精品文檔放心下載2.創(chuàng)建顯示界面及添加WebView控件3.對WebView控件進行界面編輯設(shè)置WebView顯示的界面,并設(shè)置顯示自動默認為橫屏并允許JavaScript腳本。感謝閱讀四、設(shè)計成果我們組所設(shè)計的溫濕度傳感器,成功實現(xiàn)了溫度的采集、讀取、保存、上傳新浪云和實時顯示的功能。精品文檔放心下載它能夠在Linux/Android下每隔30秒自動采集一次溫度信號,同時將采集到的溫度信息保存到本地數(shù)據(jù)庫并上傳新浪云的MySQL數(shù)據(jù)庫。兩個數(shù)據(jù)庫都能夠存儲8個小時的960條數(shù)據(jù)記錄。謝謝閱讀我們編寫了兩個客戶端,能夠訪問數(shù)據(jù)庫實現(xiàn)讀取數(shù)據(jù)、刪除數(shù)據(jù)等操作。一個是用Python語言編寫的在網(wǎng)頁上顯示的界面,另一個是在Android客戶端上進行顯示的界面,都能夠顯示8個小時的溫度曲線并實時更新。除此之外,網(wǎng)頁顯示還能夠準確顯示出每次采集溫度的時間和所采集到的溫度值。謝謝閱讀顯示界面如下圖所示:圖4-1 網(wǎng)頁客戶端顯示界面4-2Android客戶端顯示界面五、設(shè)計總結(jié)此次綜合實踐為大學(xué)以來工程量相對很大、涉及知識面較廣、且課本已學(xué)知識涉及很少的一門課程,在這次設(shè)計選題階段,經(jīng)過討論,確定了選擇課題一——溫濕度傳感器的設(shè)計。著手做設(shè)計時,在對照了本專業(yè)相關(guān)知識之后,依然覺得無從下手。在根據(jù)題目要求對相關(guān)語言及軟件進行簡單學(xué)習之后有了大概的工作方向,根據(jù)方向確定出了所能想到且有可能實現(xiàn)的最高目標。之后進行分工及學(xué)習,在學(xué)習過程中根據(jù)教程進行簡單學(xué)習,簡單對設(shè)計的語言進行入門。完成這些學(xué)習后,開始在樹莓派上實踐設(shè)計,由于以前對Linux系統(tǒng)沒有太多使用使用的經(jīng)驗,對指令操作顯得十分困難,在燒寫系統(tǒng)及配置環(huán)境過程中,都是盡可能的搜集更多地資料,進行比對,逐個排查,最終找到有效解決方法,且在這次設(shè)計過程中,找資料這一項即讓我們覺得頭痛,網(wǎng)上資料十分冗雜,有部分人盜用他人資料的部分造感謝閱讀成資料不全,這樣在實際操作過程中就很難實現(xiàn)預(yù)期目的。在入門之后也有在預(yù)期做出來感覺效果不好而放棄的,如本地顯示,在起初做的是利用PHP和新浪云一樣顯示,但成功之后發(fā)現(xiàn)受樹莓派性能影響,顯示較慢,故改成利用客戶端顯示,考慮到前部分程序是使用Python寫的為簡化工作量,在了解到Python顯示之后為利用自帶庫進行顯示最終慢慢學(xué)習顯示。此外還有許多預(yù)期目標沒有實現(xiàn),如實現(xiàn)交互式數(shù)據(jù)界面,Android客戶端自行下載數(shù)據(jù)進行畫圖,但在Android學(xué)習過程中遇到很多困難,最終放棄此種想法,改為使用WebView控件這種取巧的簡單方法。另外通過這次設(shè)計,尤其在配置Android開發(fā)環(huán)境過程中發(fā)現(xiàn),網(wǎng)絡(luò)資源下載也是一種問題,由于國家政策及相關(guān)群體的影響,對國外網(wǎng)站訪問受限,所以下載相關(guān)資源很困難,需要不斷尋找解決方案。精品文檔放心下載此外,在某些過程中體會到某些目的可以嘗試著去試驗自己認為可以的方法,而不僅僅是向網(wǎng)上借鑒,如在本項目中庸PHP繪制折線圖安裝GD庫,剛開始查詢資料都需要另外下載再單獨安裝,但親自試驗多次都未能成功,突然想到試試apt-get指令能否成功,就試了一下apt-getinstallPHP5-gd,結(jié)果成功安裝。感謝閱讀在本次設(shè)計過程中各成員間分工與集體相互合作,完成該項目設(shè)計。其中各組員的分工為:精品文檔放心下載陳 巖:(1)負責總體思路的構(gòu)思和架構(gòu)的構(gòu)建;(2)樹莓派的啟動;(3)數(shù)據(jù)上傳;(4)網(wǎng)頁客戶端編程;(5)Android客戶端網(wǎng)頁插入;全部完成陳燦堅:(1)本地數(shù)據(jù)庫修改;(2)數(shù)據(jù)修改界面的編程;工作全部完成郭鐳斌:(1)硬件搭建;(2)溫度信息采集編程;工作全部完成劉 楊:(1)新浪云數(shù)據(jù)庫創(chuàng)建;(2)網(wǎng)頁顯示界面編程;工作全部完成小組成員經(jīng)過努力和交流,都最終完成了自己的設(shè)計任務(wù)。感謝閱讀六、參考文獻[1]EbenUptonGarethHalfacree.著.王偉許金超郭棟梁黎穎.譯.RaspberryPi用戶指南.人民郵電出版社.2013年8月謝謝閱讀[2]WesleyJ.Chun著.宋吉廣.譯.Python核心編程第二版.北京.人民郵電出版社.2008精品文檔放心下載7月[3]張若愚.Python科學(xué)計算.北京.清華大學(xué)出版社.2012年1月精品文檔放心下載[4]孫宏明.Android4.X手機/平板電腦程序設(shè)計入門、應(yīng)用到精通第二版.北京.中國水利水電出版社.2012年8月感謝閱讀[5].(澳)LukeWellin(.澳)LauraThomson.武欣譯.PHP和MySQL.Web開發(fā)第4版.北京.機械工業(yè)出版社.2009年4月精品文檔放心下載網(wǎng)絡(luò)資料[1]SQL入門.北京傳智播客教育[2]MySQL實用技術(shù).杜梓平.蘇州工業(yè)園區(qū)服務(wù)外包職業(yè)學(xué)院精品文檔放心下載[3]極客教程[4]慕課網(wǎng)教程附錄1:實踐日志:時間:2015.07.16(第一天)一、內(nèi)容:分析所選課題——溫濕度傳感器設(shè)計,查閱資料,確定需要設(shè)計的模塊及相應(yīng)的學(xué)習內(nèi)容。感謝閱讀二、分析結(jié)果:要完成溫濕度傳感器的設(shè)計并使其能夠?qū)崟r顯示,我們需要模塊來完成。需要學(xué)習的新知識有PHP、Android、MySQL等。謝謝閱讀時間:2015.07.17(第二天)一、內(nèi)容:學(xué)習在windows下配置wampsever;謝謝閱讀學(xué)習PHP腳本鏈接語言、Apache2和MySQL的相關(guān)操作。感謝閱讀二、方法:網(wǎng)上搜集資料,小組討論。三、遇到的問題:剛接觸新知識,理解起來有些困難,進度稍慢。時間:2015.07.18(第三天)一、內(nèi)容:繼續(xù)學(xué)習PHP腳本鏈接語言、Apache2和MySQL的相關(guān)操作。謝謝閱讀二、方法:網(wǎng)上搜集資料,小組討論。三、遇到的問題:今天的學(xué)習比較順利。時間:2015.07.19(第四天)一、內(nèi)容:啟動樹莓派二、方法:系統(tǒng)下載登陸/downloads/,點擊DOWNLOADS,下載樹莓派的系統(tǒng)。感謝閱讀解壓系統(tǒng)下載完成后,將得到的壓縮文件進行解壓,得到名為“win32diskimager(鏡像寫感謝閱讀盤工具)”的文件夾。燒寫系統(tǒng)打開“win32diskmigager(鏡像寫U盤工具)”文件夾,找到Win32DiskImager.exe可執(zhí)行文件,雙擊運行。精品文檔放心下載選擇剛下載的鏡像文件,病選擇目標內(nèi)存卡,點擊“寫”按鈕,等待燒寫完成。精品文檔放心下載硬件搭建將SD卡插入樹莓派卡槽,連接網(wǎng)線至路由器接口,并給電源供電。感謝閱讀查看樹莓派IP地址:通過路由管理器查看名為raspberry的IP地址。謝謝閱讀Putty配置首次登陸需要用SSH,雙擊“putty.exe”文件,在彈出的對話框中輸入主機IP地址:精品文檔放心下載10。安裝遠程桌面在命令窗口中l(wèi)oginas:后輸入pi,輸入密碼:raspberry。輸入sudoapt-getinstallxrdp,安裝遠程桌面。精品文檔放心下載設(shè)置root用戶及密碼遠程登陸使用SD卡剩余空間三、遇到的問題:系統(tǒng)下載速度慢。解決方法:先下載BT種子,再載通過第三方軟件(迅雷下載)進行安裝。感謝閱讀時間:2015.07.20(第五天)一、內(nèi)容:學(xué)習數(shù)據(jù)庫的相關(guān)操作。二、方法:網(wǎng)上查閱資料,建立數(shù)據(jù)庫并進行相關(guān)操作練習。時間:2015.07.22(第六天)一、內(nèi)容:PHP訪問mysql數(shù)據(jù)庫二、遇到的問題:問題:變量如何傳遞三、解決方法:將操作語言單獨列出再進行傳遞時間:2015.07.23(第七天)一、內(nèi)容:PHP訪問mysql數(shù)據(jù)庫二、遇到的問題:問題1:PHP讀取出的數(shù)據(jù)無法繪制成折線圖問題2:繪圖時imagestring函數(shù)無法顯示中文謝謝閱讀三、解決過程:問題1:思路:網(wǎng)上查閱一下PHP是否需要插件通過查資料得知,PHP需要安裝GD庫才能繪圖,安裝GD庫的經(jīng)歷如下:感謝閱讀(1) 在網(wǎng)上直接下載GD庫進行安裝,安裝失敗。精品文檔放心下載(2) 用指令安裝:apt-getinstallphp5-gd,安裝成功。感謝閱讀問題2:函數(shù)使用錯誤,換成使用imageTTFText函數(shù),并添加漢字字體文件,語句如下:感謝閱讀imageTTFText($im,15,0,$kuan/3.5,20,$text_color,"font/simfang.ttf","實時溫度顯示系統(tǒng)");謝謝閱讀時間:2015.07.24(第八天)一、內(nèi)容:利用PHP畫折線圖更改方案二、遇到的問題:利用PHP畫折線圖時網(wǎng)頁顯示很慢,刷新時會出現(xiàn)電腦卡掉的狀況。感謝閱讀三、解決方法:改為利用Python讀取數(shù)據(jù)庫內(nèi)容并畫圖顯示,并開始學(xué)習PythonTKinter。謝謝閱讀時間:2015.07.26(第九天)一、內(nèi)容:Python訪問mysql數(shù)據(jù)庫二、方法:安裝MySQLdb模塊三、遇到的問題:問題1:在執(zhí)行:pythonsetup.pybuild遇到以下錯誤:感謝閱讀EnvironmentError:mysql_confignotfound精品文檔放心下載解決方法:首先查找mysql_config的位置,使用find/-namemysql_config問題2:無法找到mysql_config文件解決方法:sudoapt-getins
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年烽火通信科技股份有限公司招聘筆試參考題庫含答案解析
- 2025年福建龍巖市龍騰國有資產(chǎn)經(jīng)營發(fā)展有限公司招聘筆試參考題庫附帶答案詳解
- 2025年度美甲店高級技師聘用合同4篇
- 2025年吉林通化市梅河口市鷺航旅游管理有限公司招聘筆試參考題庫附帶答案詳解
- 2024年度青海省公共營養(yǎng)師之四級營養(yǎng)師全真模擬考試試卷B卷含答案
- 2024年度青海省公共營養(yǎng)師之二級營養(yǎng)師題庫與答案
- 2024年度青海省公共營養(yǎng)師之二級營養(yǎng)師能力提升試卷A卷附答案
- 2024年度黑龍江省公共營養(yǎng)師之三級營養(yǎng)師考前練習題及答案
- 2024-2025學(xué)年高中歷史第七單元復(fù)雜多樣的當代世界第25課世界多極化趨勢學(xué)案含解析岳麓版必修1
- 2024年度陜西省公共營養(yǎng)師之四級營養(yǎng)師全真模擬考試試卷B卷含答案
- 博弈論全套課件
- CONSORT2010流程圖(FlowDiagram)【模板】文檔
- 腦電信號處理與特征提取
- 高中數(shù)學(xué)知識點全總結(jié)(電子版)
- GB/T 10322.7-2004鐵礦石粒度分布的篩分測定
- 2023新譯林版新教材高中英語必修一重點詞組歸納總結(jié)
- 蘇教版四年級數(shù)學(xué)下冊第3單元第2課時“常見的數(shù)量關(guān)系”教案
- 弘揚中華傳統(tǒng)文化課件
- 基于協(xié)同過濾算法的電影推薦系統(tǒng)設(shè)計
- 消防應(yīng)急預(yù)案流程圖
- 人教統(tǒng)編版高中語文必修下冊第六單元(單元總結(jié))
評論
0/150
提交評論