“攻城獅”爸比的showtime:為寶貝自製一台兒童小電腦
發布時間:2015-12-18 來源:EDN電子技術設計 責任編輯:wenwei
【導讀】如(ru)果(guo)你(ni)家(jia)有(you)小(xiao)孩(hai),一(yi)定(ding)能(neng)懂(dong)我(wo)做(zuo)這(zhe)個(ge)項(xiang)目(mu)的(de)初(chu)衷(zhong)。我(wo)們(men)每(mei)天(tian)都(dou)會(hui)玩(wan)著(zhe)手(shou)機(ji),敲(qiao)著(zhe)鍵(jian)盤(pan)跟(gen)朋(peng)友(you)聊(liao)天(tian),小(xiao)孩(hai)子(zi)看(kan)見(jian)了(le)就(jiu)想(xiang)模(mo)仿(fang),但(dan)出(chu)於(yu)保(bao)護(hu)眼(yan)睛(jing)等(deng)一(yi)係(xi)列(lie)考(kao)慮(lv),我(wo)們(men)又(you)不(bu)能(neng)讓(rang)他(ta)們(men)過(guo)早(zao)的(de)接(jie)觸(chu)電(dian)子(zi)設(she)備(bei)。所(suo)以(yi)我(wo)就(jiu)想(xiang)到(dao),能(neng)不(bu)能(neng)做(zuo)一(yi)個(ge)小(xiao)玩(wan)意(yi)讓(rang)他(ta)們(men)也(ye)嚐(chang)試(shi)著(zhe)學(xue)習(xi)閱(yue)讀(du)和(he)書(shu)寫(xie)呢(ne)?不(bu)過(guo)項(xiang)目(mu)剛(gang)開(kai)始(shi)時(shi)確(que)實(shi)挺(ting)困(kun)難(nan),所(suo)以(yi)我(wo)又(you)不(bu)斷(duan)添(tian)加(jia)新(xin)功(gong)能(neng)以(yi)保(bao)持(chi)它(ta)對(dui)孩(hai)子(zi)的(de)吸(xi)引(yin)力(li)。

在開始寫教程之前,我想感謝http://www.rinkydinkelectronics.com,我從上麵汲取了很多營養,從各種庫到代碼,有了它們我才能玩轉這塊TFT觸摸屏。
所需零配件:
·Arduino Mega 2560開發板。
·一塊3.2英寸的觸摸屏和保護殼,別忘了觸控筆。
·一張SD卡,用來保存孩子的塗鴉。
·ESP8266 WiFi模塊,以便設備連接互聯網。
·DS1703時鍾模塊。
·電池適配器(找適合你所用電池的哦)。
·一個漂亮的殼子
·設定好一個互聯網接入點,這樣即使你不在家也可連上熱點使用設備。
·在服務器上創建一個隨時能通過PHP訪問的數據庫。
·為不同的孩子創建不同的電郵地址。
第一步:連接硬件

由於屏幕和外殼占據了Mega 2560的所有接口,所以我不得不在Mega開發板兩邊又焊接了幾個接口,雖然看起來醜了點,但至少管用了。這樣我們準備的 DS1703和ESP8266模塊,甚至電池都可以順利連接了。

說到ESP8266 WiFi模塊,這次我算是走了狗屎運,連接時我直接將ESP8266模塊的RX和TX接口連上了Mega開發板上的TX和RX接口,幸運的是,它居然運行無誤。其實這不是正確的連接方法,我推薦你們還是參考下下麵這個網頁的連接方法吧:
隨後你就可以將觸摸屏連上Mega開發板並套上保護殼了。對了,別忘了插入準備好的SD卡。
第二步:載入軟件

想要運行該設備,你需要兩個軟件組件。第一個是Arduino Sketch,第二個則是運行在你服務器上的PHP腳本和來自Arduino的HTTP Get請求。ESP8266上使用的HTTP 1.0協議有些過時,用起來有些不舒服,你隻能通過它發送HTTP Get請求和HTTP Post請求。所以你需要將來自Arduino的HTTP Get請求轉換成STMP(簡單電子郵件協議)或其他格式,而這正是PHP腳本的一部分。
Arduino
在Arduino 1.5.6 beta上,該Sketch的運行和測試都進行的很順利,但升級到最新的1.6.0就不行了(出現了TFT校準錯誤)。所以在你加載這個Sketch之前,請對其進行編輯並根據你的互聯網接入點設置相應參數。下麵是範例:
#define DEST_HOST "www.your_own_host.de"
#define SSID_HOME "FritzBoxHOME"
#define PASS_HOME "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
記住,DEST_HOST並不是你在服務器上的IP地址,所以你的PHP腳本不會在那裏運行。在你的根目錄裏,Sketch會建立一個名為“Scripts”的文件夾,而你的PHP腳本最終會上傳到這裏。
SSID_HOME和PASS_HOME則是互聯網接入點的設置。想要通過路由器上網(我用的是德國的Fritz Box路由),你就要進入路由器設置中心對其進行配置。想使用移動熱點的話,你就要進入設置->更多設置->WLAN熱點->移動熱點對其進行配置(安卓係統)。
下載了Sketch之後記得先閱讀詳細步驟並做出正確的配置調整。如果一切運行正常,在加載了Sketch之後,你就會看到主界麵,上麵會顯示鍵盤,一些圖標和WiFi狀態欄(綠色為已連接,紅色則為斷開)。
PHP
PHP腳本在這個項目中起了很重要的作用,它是Arduino開發板和SMPT服務器之間的接口,你可以通過它收發郵件。它可以將開發板上反饋來的HTTP Get請求轉換成相應的動作,完成閱讀郵件,發送郵件和圖片等工作。
第三步:使用應用程序:用戶和郵件設置

用戶
該程序可供三個不同用戶使用,每個用戶都可設定自己的頭像(.c文件,和Sketch一起上傳到RAM中)。這個格式比較少見,你可以通過網站JPG_to_C converter將一張32x32的JPG圖片轉換成一個.c文件。
創建三個用戶時可使用下列代碼(三個用戶分別為Samira,Kilian和Keanu):
#define SENDER_CNT 3
//Photo .c Files:
extern unsigned int keanu[0x1024];
extern unsigned int kilian[0x1024];
extern unsigned int samira[0x1024];
char *key_sendername[SENDER_CNT] = { "Samira", "Kilian", "Keanu" };
unsigned int *icon_sendername[SENDER_CNT] = {samira, kilian, keanu};
你在創建用戶時隻需修改用戶名和圖片就行了,其他代碼完全相同。
更換用戶時,你隻需點擊Logged User圖標並選擇要使用的用戶就好。登陸的用戶可以發送郵件或閱讀收到的郵件,每個用戶在SD卡(ka)的(de)根(gen)目(mu)錄(lu)上(shang)都(dou)會(hui)有(you)自(zi)己(ji)專(zhuan)用(yong)的(de)信(xin)箱(xiang)文(wen)檔(dang),你(ni)的(de)郵(you)件(jian)和(he)郵(you)件(jian)中(zhong)的(de)附(fu)圖(tu)都(dou)會(hui)保(bao)存(cun)在(zai)這(zhe)裏(li)。未(wei)來(lai),我(wo)想(xiang)讓(rang)該(gai)設(she)備(bei)能(neng)定(ding)期(qi)掃(sao)描(miao)郵(you)箱(xiang)並(bing)下(xia)載(zai)郵(you)件(jian)供(gong)用(yong)戶(hu)閱(yue)讀(du)。
設定郵件發送人和收件人
選擇好用戶後,HTTP Get請求就會記錄用戶的相關信息,隨後便會在服務器上生成用戶的郵件地址。
想要改變收件人,隻需點擊Mail To圖標並在其中進行選擇就好。與上一步相同,設備會記錄收件人的相關信息,然後通過PHP轉換出正確的郵件地址。
更多詳細信息請參閱第六步:發送郵件。
第四步:使用應用程序:塗鴉
想要畫畫,點擊彩虹圖標就行,該圖標在作畫前是紅色的。

所有的畫作都會保存在SD卡上,用戶可以找到它們並將其添加到郵件中。
由於HTTP 1.0dexianzhi,niwufacaiyongerjinzhifasongtupian,suoyihaizidetuyahuizhuanhuanchengyizhongteyougeshibingbaocunzaiyigewenbenwendangzhong,fasonghoufuwuqibianhuijiangqizhongxinzhuanhuanweitupian。


weilebimianfasongdetupiantijiguoyupangda,zaipingmuzhongyangyoucehaihuixianshiyigecaisetubiao,tahuigenjutupiandedaxiaobuduanbianse。ruguogaitubiaobianhong,jiushuomingtupiantijiyidashangxian,ziciSD卡就不會繼續記錄信息了。最大圖片體積為3K,這對孩子的塗鴉來說絕對足夠了。
彩cai色se圖tu標biao還hai會hui充chong當dang確que認ren鍵jian,畫hua圖tu完wan成cheng時shi你ni需xu要yao點dian擊ji它ta進jin行xing確que認ren。隨sui後hou彩cai虹hong圖tu標biao就jiu會hui顯xian現xian出chu來lai,這zhe時shi你ni就jiu可ke以yi將jiang圖tu片pian添tian加jia進jin郵you件jian了le。如ru果guo你ni暫zan時shi不bu想xiang發fa送song,該gai圖tu片pian會hui被bei保bao存cun在zaiSD中,隨後你可以通過圖片瀏覽器回看這些圖片。
第五步:使用應用程序:發送郵件

發郵件也很簡單,隻要點擊信封圖標,就可以發出一封郵件(原始郵件是HTTP Get請求,隨後會轉換為可讀郵件)。如果係統工作正常,發送狀態欄會呈綠色,若WiFi連接出現問題,狀態欄則會變成紅色。

HTTP Get請求包含了許多服務器端的郵件信息,包括用戶的姓名和收件人的姓名。而PHP腳本則會收到一條包含請求和配置值的信息。當然,我們必須在PHP腳本上傳到服務器前搞定這些設置,這樣郵件係統才能正常工作。

下麵是PHP腳本中很有趣的一部分:
/*****************************************/
/* SEND MAIL */
/*****************************************/
if( (strlen($send_mail_from) > 0 && strlen($send_mail_to) > 0)
|| strlen($get_image) > 0 || strlen($_POST["MailImage"])>0
|| strlen($end_image) > 0 || strlen($get_image_name) > 0
|| strlen($give_me_image) > 0 )
{
$handy_light = 0;
$to = '''''''';
if( strcmp($send_mail_to, "Papa") == 0 )
$to = '''''''';
else if( strcmp($send_mail_to, "Keanu") == 0 )
{
$to = ''''keanu@your_domain.com'''';
$handy_light = 1;
}
else if( strcmp($send_mail_to, "Kilian") == 0 )
{
$to = ''''kilian@your_domain.com'''';
$handy_light = 1;
}
else if( strcmp($send_mail_to, "Samira") == 0 )
{
$to = ''''samira@your_domain.com'''';
$handy_light = 1;
}
else if( strcmp($send_mail_to, "Mami") == 0 )
$to = ''''gradnma@hotmail.com'''';
else if( strcmp($send_mail_to, "Juanito") == 0 )
$to = ''''oncle@hotmail.com'''';
else if( strcmp($send_mail_to, "Javier") == 0 )
$to = ''''myfriend@gmail.com'''';
$subject = ''''De: '''' . $send_mail_from;
$message = $mailbody;
$headers = ''''From: '''' . $send_mail_from . ''''@your_domain.com'''' . "rn" .
''''Reply-To: '''' . $send_mail_from . ''''@your_domain.com'''' . "rn" .
''''X-Mailer: PHP/'''' . phpversion();
你隻需要將我的發件人Mama,Papa等改成你想要的名字就好。
.. etc
此外你還可以修改郵箱地址。
PHP腳本需要獲知是否收件人已經通過PC,手機或Mailduino收到了郵件。隻有這樣,它才能決定是否執行對圖片的轉換工作,以便收件人在不同的設備上看到正常的圖片(普通設備會轉換為JPG,Mailduino則會直接讀取.c格式的文檔)。所以,請將PHP變量$handy_light設為true或false(應對不同的收信設備)。
第六步:使用應用程序:接收郵件

想xiang閱yue讀du郵you件jian的de話hua,你ni需xu要yao點dian擊ji卡ka車che圖tu標biao,這zhe樣yang就jiu能neng進jin入ru郵you件jian界jie麵mian了le。不bu過guo屏ping幕mu上shang隻zhi會hui顯xian示shi最zui近jin的de四si封feng郵you件jian,所suo有you收shou到dao的de郵you件jian都dou保bao存cun在zai郵you箱xiang文wen檔dang裏li。該gai設she備bei無wu法fa讀du取qu采cai用yongHTML代碼的郵件,所以在正式使用前我推薦你先在PC上做下測試,將設定改為“僅文本”。
想(xiang)要(yao)看(kan)看(kan)是(shi)否(fou)收(shou)到(dao)了(le)新(xin)郵(you)件(jian)?很(hen)簡(jian)單(dan),隻(zhi)需(xu)點(dian)擊(ji)主(zhu)界(jie)麵(mian)上(shang)部(bu)的(de)卡(ka)車(che)圖(tu)標(biao)就(jiu)好(hao)。隻(zhi)要(yao)用(yong)戶(hu)在(zai)兩(liang)分(fen)鍾(zhong)內(nei)沒(mei)有(you)活(huo)動(dong),係(xi)統(tong)就(jiu)會(hui)自(zi)動(dong)檢(jian)查(zha)並(bing)下(xia)載(zai)新(xin)郵(you)件(jian)。在(zai)整(zheng)個(ge)過(guo)程(cheng)中(zhong),開(kai)發(fa)板(ban)會(hui)發(fa)送(song)一(yi)個(ge)HTTP Get請求,隨後PHP腳本便會開始檢查新郵件,所有新郵件都會以較為簡單的格式回傳到Arduino開發板。如果收到了新郵件,界麵右下方就會出現一個藍色的M圖標來提醒你。
在郵件域中,標準文本呈白色,發送人地址則為紅色。為了保證發送域包含一個已知人的標識符,屏幕上會顯示發送人的頭像。
如果郵件內含有圖片,那麼收到的郵件會包含圖片的名字,Arduino會通過HTTP Getzaicixiangfuwuqifaqiqingqiu,zheshishebeijiuhuikaishixindexiazai,nijiunengkandaoyuanshidequanxiangsutupianle。ciwai,nikeyitongguojieshouzhuangtailanlailejiexiazaidezhuangtai。
如果郵件內含有圖片,你會在郵件域的右邊看到一片彩虹,點擊它就能打開圖片。
PHP配置
如果你想隨時查看賬戶,服務器端也有些設置需要改變。來自Arduino的HTTP Get請求包含了賬戶的名字,這些會保存在一個名為$get_mails_for的變量PHP腳本中。請參考下列代碼並修改你想查看的郵件地址和密碼。
/*****************************************/
/* RECEIVE MAILS */
/*****************************************/
else
{
if( strcmp($get_mails_for,"Keanu") == 0 )
{
$USER_NAME="keanu@your_domain.com";
$USER_PASS="A123456b";
}
else if( strcmp($get_mails_for,"Kilian")==0 )
{
$USER_NAME="kilian@your_domain.com";
$USER_PASS="A123456b";
}
else if( strcmp($get_mails_for,"Samira") == 0 )
{
$USER_NAME="samira@your_domain.com";
$USER_PASS="A123456b";
}
else
$USER_NAME="default@your_domain.com";
echo "Reading Mails for " . $get_mails_for . " from Server with PHPn";
$inbox = imap_open ("{". $MAIL_HOST . ":143}INBOX", $USER_NAME, $USER_PASS) or die("Can''''t connect IMAP-Server!");
第七步:使用應用程序:圖片瀏覽器

用戶的所有畫作都會存儲在SD卡上,隻要點擊時鍾圖標左邊的圖標就可進入圖片瀏覽模式,圖片瀏覽器中的圖片會按名字呈九宮格排列。

想要看原始大小的圖片,你隻需點擊它就行。看完之後,隨便點擊以下圖片就能回到剛剛的瀏覽界麵。
如上圖所示,手型圖標可以讓你進入下一頁。
確認圖標則可以讓你回到主界麵。
第八步:時鍾界麵

想要激活該設備的時鍾功能,你需要先對你的DS1307時鍾模塊進行設置。隻需加載下列Arduino Sketch並調好時間就行(記得用unix格式):
/* T(string_utctime) */
#include
#include
#include // a basic DS1307 library that returns time as a time_t
void setup()
{
Serial.begin(9600);
setSyncProvider(RTC.get); // the function to get the time from the RTC
if(timeStatus()!= timeSet)
Serial.println("Unable to sync with the RTC");
else
Serial.println("RTC has set the system time");
}
void loop()
{
if(Serial.available())
{
time_t t = processSyncMessage();
if(t >0)
{
RTC.set(t); // set the RTC and the system time to the received value
setTime(t);
}
}
digitalClockDisplay();
delay(1000);
}
void digitalClockDisplay(){
// digital clock display of the time
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.print(" ");
Serial.print(day());
Serial.print(" ");
Serial.print(month());
Serial.print(" ");
Serial.print(year());
Serial.println();
}
void printDigits(int digits){
// utility function for digital clock display: prints preceding colon and leading 0
Serial.print(":");
if(digits < 10)
Serial.print(''''0'''');
Serial.print(digits);
}
/* code to process time sync messages from the serial port */
#define TIME_MSG_LEN 11 // time sync to PC is HEADER followed by unix time_t as ten ascii digits
#define TIME_HEADER ''''T'''' // Header tag for serial time sync message
time_t processSyncMessage() {
// return the time if a valid sync message is received on the serial port.
while(Serial.available() >= TIME_MSG_LEN ){ // time message consists of a header and ten ascii digits
char c = Serial.read() ;
Serial.print(c);
if( c == TIME_HEADER ) {
time_t pctime = 0;
for(int i=0; i < TIME_MSG_LEN -1; i++){
c = Serial.read();
if( c >= ''''0'''' && c <= ''''9''''){
pctime = (10 * pctime) + (c - ''''0'''') ; // convert digits to a number
}
}
return pctime;
}
}
return 0;
}
設定好你的DS1307後,隻需點擊主界麵上的時鍾圖標就可以用該設備查看當前時間了。
一個DIY的兒童電腦就完成啦,大家快試試吧!
特別推薦
- 噪聲中提取真值!瑞盟科技推出MSA2240電流檢測芯片賦能多元高端測量場景
- 10MHz高頻運行!氮矽科技發布集成驅動GaN芯片,助力電源能效再攀新高
- 失真度僅0.002%!力芯微推出超低內阻、超低失真4PST模擬開關
- 一“芯”雙電!聖邦微電子發布雙輸出電源芯片,簡化AFE與音頻設計
- 一機適配萬端:金升陽推出1200W可編程電源,賦能高端裝備製造
技術文章更多>>
- 一秒檢測,成本降至萬分之一,光引科技把幾十萬的台式光譜儀“搬”到了手腕上
- AI服務器電源機櫃Power Rack HVDC MW級測試方案
- 突破工藝邊界,奎芯科技LPDDR5X IP矽驗證通過,速率達9600Mbps
- 通過直接、準確、自動測量超低範圍的氯殘留來推動反滲透膜保護
- 從技術研發到規模量產:恩智浦第三代成像雷達平台,賦能下一代自動駕駛!
技術白皮書下載更多>>
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
按鈕開關
白色家電
保護器件
保險絲管
北鬥定位
北高智
貝能科技
背板連接器
背光器件
編碼器型號
便攜產品
便攜醫療
變容二極管
變壓器
檳城電子
並網
撥動開關
玻璃釉電容
剝線機
薄膜電容
薄膜電阻
薄膜開關
捕魚器
步進電機
測力傳感器
測試測量
測試設備
拆解
場效應管
超霸科技



