“攻城獅”爸比的showtime:為寶貝自製一台兒童小電腦
發布時間:2015-12-18 來源:EDN電子技術設計 責任編輯:wenwei
【導讀】ruguonijiayouxiaohai,yidingnengdongwozuozhegexiangmudechuzhong。womenmeitiandouhuiwanzheshouji,qiaozhejianpangenpengyouliaotian,xiaohaizikanjianlejiuxiangmofang,danchuyubaohuyanjingdengyixiliekaolv,womenyoubunengrangtamenguozaodejiechudianzishebei。suoyiwojiuxiangdao,nengbunengzuoyigexiaowanyirangtamenyechangshizhexuexiyueduheshuxiene?buguoxiangmugangkaishishiqueshitingkunnan,suoyiwoyoubuduantianjiaxingongnengyibaochitaduihaizidexiyinli。

在開始寫教程之前,我想感謝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圖標並選擇要使用的用戶就好。登陸的用戶可以發送郵件或閱讀收到的郵件,每個用戶在SDkadegenmulushangdouhuiyouzijizhuanyongdexinxiangwendang,nideyoujianheyoujianzhongdefutudouhuibaocunzaizheli。weilai,woxiangranggaishebeinengdingqisaomiaoyouxiangbingxiazaiyoujiangongyonghuyuedu。
設定郵件發送人和收件人
選擇好用戶後,HTTP Get請求就會記錄用戶的相關信息,隨後便會在服務器上生成用戶的郵件地址。
想要改變收件人,隻需點擊Mail To圖標並在其中進行選擇就好。與上一步相同,設備會記錄收件人的相關信息,然後通過PHP轉換出正確的郵件地址。
更多詳細信息請參閱第六步:發送郵件。
第四步:使用應用程序:塗鴉
想要畫畫,點擊彩虹圖標就行,該圖標在作畫前是紅色的。

所有的畫作都會保存在SD卡上,用戶可以找到它們並將其添加到郵件中。
由於HTTP 1.0的de限xian製zhi,你ni無wu法fa采cai用yong二er進jin製zhi發fa送song圖tu片pian,所suo以yi孩hai子zi的de塗tu鴉ya會hui轉zhuan換huan成cheng一yi種zhong特te有you格ge式shi並bing保bao存cun在zai一yi個ge文wen本ben文wen檔dang中zhong,發fa送song後hou服fu務wu器qi便bian會hui將jiang其qi重zhong新xin轉zhuan換huan為wei圖tu片pian。


為(wei)了(le)避(bi)免(mian)發(fa)送(song)的(de)圖(tu)片(pian)體(ti)積(ji)過(guo)於(yu)龐(pang)大(da),在(zai)屏(ping)幕(mu)中(zhong)央(yang)右(you)側(ce)還(hai)會(hui)顯(xian)示(shi)一(yi)個(ge)彩(cai)色(se)圖(tu)標(biao),它(ta)會(hui)根(gen)據(ju)圖(tu)片(pian)的(de)大(da)小(xiao)不(bu)斷(duan)變(bian)色(se)。如(ru)果(guo)該(gai)圖(tu)標(biao)變(bian)紅(hong),就(jiu)說(shuo)明(ming)圖(tu)片(pian)體(ti)積(ji)已(yi)達(da)上(shang)限(xian),自(zi)此(ci)SD卡就不會繼續記錄信息了。最大圖片體積為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)在(zai)SD中,隨後你可以通過圖片瀏覽器回看這些圖片。
第五步:使用應用程序:發送郵件

發郵件也很簡單,隻要點擊信封圖標,就可以發出一封郵件(原始郵件是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個geHTTP Get請求,隨後PHP腳本便會開始檢查新郵件,所有新郵件都會以較為簡單的格式回傳到Arduino開發板。如果收到了新郵件,界麵右下方就會出現一個藍色的M圖標來提醒你。
在郵件域中,標準文本呈白色,發送人地址則為紅色。為了保證發送域包含一個已知人的標識符,屏幕上會顯示發送人的頭像。
如果郵件內含有圖片,那麼收到的郵件會包含圖片的名字,Arduino會通過HTTP Get再zai次ci向xiang服fu務wu器qi發fa起qi請qing求qiu,這zhe時shi設she備bei就jiu會hui開kai始shi新xin的de下xia載zai,你ni就jiu能neng看kan到dao原yuan始shi的de全quan像xiang素su圖tu片pian了le。此ci外wai,你ni可ke以yi通tong過guo接jie收shou狀zhuang態tai欄lan來lai了le解jie下xia載zai的de狀zhuang態tai。
如果郵件內含有圖片,你會在郵件域的右邊看到一片彩虹,點擊它就能打開圖片。
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可編程電源,賦能高端裝備製造
技術文章更多>>
- 三星上演罕見對峙:工會集會討薪,股東隔街抗議
- 摩爾線程實現DeepSeek-V4“Day-0”支持,國產GPU適配再提速
- 築牢安全防線:智能駕駛邁向規模化應用的關鍵挑戰與破局之道
- GPT-Image 2:99%文字準確率,AI生圖告別“鬼畫符”
- 機器人馬拉鬆的勝負手:藏在主板角落裏的“時鍾戰爭”
技術白皮書下載更多>>
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
鑒頻器
江蘇商絡
交流電機
腳踏開關
接觸器接線
接近開關
接口IC
介質電容
介質諧振器
金屬膜電阻
晶體濾波器
晶體諧振器
晶體振蕩器
晶閘管
精密電阻
精密工具
景佑能源
聚合物電容
君耀電子
開發工具
開關
開關電源
開關電源電路
開關二極管
開關三極管
科通
可變電容
可調電感
可控矽
空心線圈

