0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于Arduino自制兒童小電腦

454398 ? 來源:互聯(lián)網(wǎng) ? 作者:佚名 ? 2015-12-15 10:46 ? 次閱讀

如果你家有小孩,一定能懂我做這個項目的初衷。我們每天都會玩著手機(jī),敲著鍵盤跟朋友聊天,小孩子看見了就想模仿,但出于保護(hù)眼睛等一系列考慮,我們又不能讓他們過早的接觸電子設(shè)備。所以我就想到,能不能做一個小玩意讓他們也嘗試著學(xué)習(xí)閱讀和書寫呢?不過項目剛開始時確實挺困難,所以我又不斷添加新功能以保持它對孩子的吸引力。

在開始寫教程之前,我想感謝http://www.rinkydinkelectronics.com,我從上面汲取了很多營養(yǎng),從各種庫到代碼,有了它們我才能玩轉(zhuǎn)這塊TFT觸摸屏。

所需零配件:

·Arduino Mega 2560開發(fā)板。

·一塊3.2英寸的觸摸屏和保護(hù)殼,別忘了觸控筆。

·一張SD卡,用來保存孩子的涂鴉。

·ESP8266 WiFi模塊,以便設(shè)備連接互聯(lián)網(wǎng)。

·DS1703時鐘模塊。

·電池適配器(找適合你所用電池的哦)。

·一個漂亮的殼子

·設(shè)定好一個互聯(lián)網(wǎng)接入點,這樣即使你不在家也可連上熱點使用設(shè)備。

·在服務(wù)器上創(chuàng)建一個隨時能通過PHP訪問的數(shù)據(jù)庫。

·為不同的孩子創(chuàng)建不同的電郵地址。

第一步:連接硬件

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

說到ESP8266 WiFi模塊,這次我算是走了狗屎運,連接時我直接將ESP8266模塊的RX和TX接口連上了Mega開發(fā)板上的TX和RX接口,幸運的是,它居然運行無誤。其實這不是正確的連接方法,我推薦你們還是參考下下面這個網(wǎng)頁的連接方法吧:

隨后你就可以將觸摸屏連上Mega開發(fā)板并套上保護(hù)殼了。對了,別忘了插入準(zhǔn)備好的SD卡。

第二步:載入軟件

想要運行該設(shè)備,你需要兩個軟件組件。第一個是Arduino Sketch,第二個則是運行在你服務(wù)器上的PHP腳本和來自Arduino的HTTP Get請求。ESP8266上使用的HTTP 1.0協(xié)議有些過時,用起來有些不舒服,你只能通過它發(fā)送HTTP Get請求和HTTP Post請求。所以你需要將來自Arduino的HTTP Get請求轉(zhuǎn)換成STMP(簡單電子郵件協(xié)議)或其他格式,而這正是PHP腳本的一部分。

Arduino

在Arduino 1.5.6 beta上,該Sketch的運行和測試都進(jìn)行的很順利,但升級到最新的1.6.0就不行了(出現(xiàn)了TFT校準(zhǔn)錯誤)。所以在你加載這個Sketch之前,請對其進(jìn)行編輯并根據(jù)你的互聯(lián)網(wǎng)接入點設(shè)置相應(yīng)參數(shù)。下面是范例:

#define DEST_HOST “www.your_own_host.de”

#define SSID_HOME “FritzBoxHOME”

#define PASS_HOME “ABCDEFGHIJKLMNOPQRSTUVWXYZ”

記住,DEST_HOST并不是你在服務(wù)器上的IP地址,所以你的PHP腳本不會在那里運行。在你的根目錄里,Sketch會建立一個名為“Scripts”的文件夾,而你的PHP腳本最終會上傳到這里。

SSID_HOME 和PASS_HOME則是互聯(lián)網(wǎng)接入點的設(shè)置。想要通過路由器上網(wǎng)(我用的是德國的Fritz Box路由),你就要進(jìn)入路由器設(shè)置中心對其進(jìn)行配置。想使用移動熱點的話,你就要進(jìn)入設(shè)置-》更多設(shè)置-》WLAN熱點-》移動熱點對其進(jìn)行配置(安卓系統(tǒng))。

下載了Sketch之后記得先閱讀詳細(xì)步驟并做出正確的配置調(diào)整。如果一切運行正常,在加載了Sketch之后,你就會看到主界面,上面會顯示鍵盤,一些圖標(biāo)和WiFi狀態(tài)欄(綠色為已連接,紅色則為斷開)。

PHP

PHP腳本在這個項目中起了很重要的作用,它是Arduino開發(fā)板和SMPT服務(wù)器之間的接口,你可以通過它收發(fā)郵件。它可以將開發(fā)板上反饋來的HTTP Get請求轉(zhuǎn)換成相應(yīng)的動作,完成閱讀郵件,發(fā)送郵件和圖片等工作。

第三步:使用應(yīng)用程序:用戶和郵件設(shè)置

用戶

該程序可供三個不同用戶使用,每個用戶都可設(shè)定自己的頭像(.c文件,和Sketch一起上傳到RAM中)。這個格式比較少見,你可以通過網(wǎng)站JPG_to_C converter將一張32x32的JPG圖片轉(zhuǎn)換成一個.c文件。

創(chuàng)建三個用戶時可使用下列代碼(三個用戶分別為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};

你在創(chuàng)建用戶時只需修改用戶名和圖片就行了,其他代碼完全相同。

更換用戶時,你只需點擊Logged User圖標(biāo)并選擇要使用的用戶就好。登陸的用戶可以發(fā)送郵件或閱讀收到的郵件,每個用戶在SD卡的根目錄上都會有自己專用的信箱文檔,你的郵件和郵件中的附圖都會保存在這里。未來,我想讓該設(shè)備能定期掃描郵箱并下載郵件供用戶閱讀。

設(shè)定郵件發(fā)送人和收件人

選擇好用戶后,HTTP Get請求就會記錄用戶的相關(guān)信息,隨后便會在服務(wù)器上生成用戶的郵件地址。

想要改變收件人,只需點擊Mail To圖標(biāo)并在其中進(jìn)行選擇就好。與上一步相同,設(shè)備會記錄收件人的相關(guān)信息,然后通過PHP轉(zhuǎn)換出正確的郵件地址。

更多詳細(xì)信息請參閱第六步:發(fā)送郵件。

第四步:使用應(yīng)用程序:涂鴉

想要畫畫,點擊彩虹圖標(biāo)就行,該圖標(biāo)在作畫前是紅色的。

所有的畫作都會保存在SD卡上,用戶可以找到它們并將其添加到郵件中。

由于HTTP 1.0的限制,你無法采用二進(jìn)制發(fā)送圖片,所以孩子的涂鴉會轉(zhuǎn)換成一種特有格式并保存在一個文本文檔中,發(fā)送后服務(wù)器便會將其重新轉(zhuǎn)換為圖片。

為了避免發(fā)送的圖片體積過于龐大,在屏幕中央右側(cè)還會顯示一個彩色圖標(biāo),它會根據(jù)圖片的大小不斷變色。如果該圖標(biāo)變紅,就說明圖片體積已達(dá)上限,自此SD卡就不會繼續(xù)記錄信息了。最大圖片體積為3K,這對孩子的涂鴉來說絕對足夠了。

彩色圖標(biāo)還會充當(dāng)確認(rèn)鍵,畫圖完成時你需要點擊它進(jìn)行確認(rèn)。隨后彩虹圖標(biāo)就會顯現(xiàn)出來,這時你就可以將圖片添加進(jìn)郵件了。如果你暫時不想發(fā)送,該圖片會被保存在SD中,隨后你可以通過圖片瀏覽器回看這些圖片。

第五步:使用應(yīng)用程序:發(fā)送郵件

發(fā)郵件也很簡單,只要點擊信封圖標(biāo),就可以發(fā)出一封郵件(原始郵件是HTTP Get請求,隨后會轉(zhuǎn)換為可讀郵件)。如果系統(tǒng)工作正常,發(fā)送狀態(tài)欄會呈綠色,若WiFi連接出現(xiàn)問題,狀態(tài)欄則會變成紅色。

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

下面是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 = ‘mama@your_domain.com’;

if( strcmp($send_mail_to, “Papa”) == 0 )

$to = ‘papa@your_domain.com’;

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’ 。 “ ” 。

‘Reply-To: ’ 。 $send_mail_from 。 ‘@your_domain.com’ 。 “ ” 。

‘X-Mailer: PHP/’ 。 phpversion();

你只需要將我的發(fā)件人Mama,Papa等改成你想要的名字就好。

mama@your_domain.com

papa@your_domain.com.。 etc

此外你還可以修改郵箱地址。

PHP 腳本需要獲知是否收件人已經(jīng)通過PC,手機(jī)或Mailduino收到了郵件。只有這樣,它才能決定是否執(zhí)行對圖片的轉(zhuǎn)換工作,以便收件人在不同的設(shè)備上看到正常的圖片(普通設(shè)備會轉(zhuǎn)換為JPG,Mailduino則會直接讀取.c格式的文檔)。所以,請將PHP變量$handy_light設(shè)為true或 false(應(yīng)對不同的收信設(shè)備)。

第六步:使用應(yīng)用程序:接收郵件

想閱讀郵件的話,你需要點擊卡車圖標(biāo),這樣就能進(jìn)入郵件界面了。不過屏幕上只會顯示最近的四封郵件,所有收到的郵件都保存在郵箱文檔里。該設(shè)備無法讀取采用HTML代碼的郵件,所以在正式使用前我推薦你先在PC上做下測試,將設(shè)定改為“僅文本”。

想要看看是否收到了新郵件?很簡單,只需點擊主界面上部的卡車圖標(biāo)就好。只要用戶在兩分鐘內(nèi)沒有活動,系統(tǒng)就會自動檢查并下載新郵件。在整個過程中,開發(fā)板會發(fā)送一個HTTP Get請求,隨后PHP腳本便會開始檢查新郵件,所有新郵件都會以較為簡單的格式回傳到Arduino開發(fā)板。如果收到了新郵件,界面右下方就會出現(xiàn)一個藍(lán)色的M圖標(biāo)來提醒你。

在郵件域中,標(biāo)準(zhǔn)文本呈白色,發(fā)送人地址則為紅色。為了保證發(fā)送域包含一個已知人的標(biāo)識符,屏幕上會顯示發(fā)送人的頭像。

如果郵件內(nèi)含有圖片,那么收到的郵件會包含圖片的名字,Arduino會通過HTTP Get再次向服務(wù)器發(fā)起請求,這時設(shè)備就會開始新的下載,你就能看到原始的全像素圖片了。此外,你可以通過接收狀態(tài)欄來了解下載的狀態(tài)。

如果郵件內(nèi)含有圖片,你會在郵件域的右邊看到一片彩虹,點擊它就能打開圖片。

PHP配置

如果你想隨時查看賬戶,服務(wù)器端也有些設(shè)置需要改變。來自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 PHP ”;

$inbox = imap_open (“{”。 $MAIL_HOST 。 “:143}INBOX”, $USER_NAME, $USER_PASS) or die(“Can‘t connect IMAP-Server!”);

第七步:使用應(yīng)用程序:圖片瀏覽器

用戶的所有畫作都會存儲在SD卡上,只要點擊時鐘圖標(biāo)左邊的圖標(biāo)就可進(jìn)入圖片瀏覽模式,圖片瀏覽器中的圖片會按名字呈九宮格排列。

想要看原始大小的圖片,你只需點擊它就行??赐曛螅S便點擊以下圖片就能回到剛剛的瀏覽界面。

如上圖所示,手型圖標(biāo)可以讓你進(jìn)入下一頁。

確認(rèn)圖標(biāo)則可以讓你回到主界面。

第八步:時鐘界面

想要激活該設(shè)備的時鐘功能,你需要先對你的DS1307時鐘模塊進(jìn)行設(shè)置。只需加載下列Arduino Sketch并調(diào)好時間就行(記得用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;

}

設(shè)定好你的DS1307后,只需點擊主界面上的時鐘圖標(biāo)就可以用該設(shè)備查看當(dāng)前時間了。

一個DIY的兒童電腦就完成啦,大家快試試吧!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Arduino
    +關(guān)注

    關(guān)注

    187

    文章

    6455

    瀏覽量

    186350
收藏 人收藏

    評論

    相關(guān)推薦

    【OK210申請】智能型兒童平板電腦

    申請理由:之前在用OK6410開發(fā)板,對飛凌的技術(shù)及服務(wù)很有信息。同時,想通過這個開發(fā)板縮短目前項目的開發(fā)周期和設(shè)計難度。項目描述:傳統(tǒng)的平板電腦都是怎么來提高學(xué)習(xí)成績,智能型兒童平板更注重對兒童行為的引導(dǎo)和糾正,從不同的階段根
    發(fā)表于 07-09 13:10

    請問自制arduino控制板不能直接用Arduino IDE燒錄程序怎么辦?

    因為需要,自制了一塊arduino2560,USB這一塊用的是CH340G,但是直接用Arduino IDE不能燒入程序,試過用Arduino燒錄bootloader,并作為ISP進(jìn)行
    發(fā)表于 12-03 11:19

    【開源分享】小白開源V3S miniPC小電腦

    作者:樹莓學(xué)LINUX簡介:小白完成了v3s_linux小電腦的制作,在這個過程中,很有收獲。linux硬件部分包括:1、板載USB_hub,攝像頭網(wǎng)卡均使用外置,所以足夠的USB接口十分重要。2
    發(fā)表于 04-14 15:20

    僅硬盤大小電腦問世:無CPU無內(nèi)存無系統(tǒng)

    國內(nèi)第一臺無CPU、無內(nèi)存、無系統(tǒng)的電腦主機(jī)在滬投產(chǎn),僅硬盤大小電腦問世:無CPU無內(nèi)存無系統(tǒng)
    發(fā)表于 07-16 14:18 ?1320次閱讀

    英偉達(dá)推出人工智能小電腦Jetson Nano,為機(jī)器人提供大腦

    英偉達(dá)今天在游戲開發(fā)者大會上發(fā)布的99美元的Jetson Nano人工智能小電腦可以加快這一進(jìn)程。
    的頭像 發(fā)表于 03-20 10:13 ?5095次閱讀

    英偉達(dá)最新推出基于嵌入式的小電腦

    在游戲者開發(fā)大會上,英偉達(dá)宣布發(fā)布一款售價99美元名為Jetson Nano人工智能小電腦。據(jù)介紹,該款產(chǎn)品可以為機(jī)器人或其它AI設(shè)備提供圖像識別、即時翻譯等“大腦”支持。
    發(fā)表于 09-05 11:44 ?818次閱讀

    如何使用Arduino Manager從移動設(shè)備或平板電腦控制Arduino

    對于家庭自動化,Arduino的遠(yuǎn)程控制或監(jiān)視,Arduino Manager可以完成所有工作。以下是使用它從移動設(shè)備或平板電腦控制Arduino的方法。
    的頭像 發(fā)表于 12-05 08:44 ?4194次閱讀

    自制Arduino噴氣發(fā)動機(jī)

    電子發(fā)燒友網(wǎng)站提供《自制Arduino噴氣發(fā)動機(jī).zip》資料免費下載
    發(fā)表于 10-28 15:02 ?2次下載
    <b class='flag-5'>自制</b><b class='flag-5'>Arduino</b>噴氣發(fā)動機(jī)

    使用Arduino優(yōu)化自制電力的電源路由器

    電子發(fā)燒友網(wǎng)站提供《使用Arduino優(yōu)化自制電力的電源路由器.zip》資料免費下載
    發(fā)表于 11-08 15:27 ?0次下載
    使用<b class='flag-5'>Arduino</b>優(yōu)化<b class='flag-5'>自制</b>電力的電源路由器

    基于arduino自制呼吸機(jī)

    電子發(fā)燒友網(wǎng)站提供《基于arduino自制呼吸機(jī).zip》資料免費下載
    發(fā)表于 11-16 09:28 ?9次下載
    基于<b class='flag-5'>arduino</b>的<b class='flag-5'>自制</b>呼吸機(jī)

    自制Arduino Nano俄羅斯方塊游戲

    電子發(fā)燒友網(wǎng)站提供《自制Arduino Nano俄羅斯方塊游戲.zip》資料免費下載
    發(fā)表于 12-07 15:18 ?3次下載
    <b class='flag-5'>自制</b><b class='flag-5'>Arduino</b> Nano俄羅斯方塊游戲

    8085自制電腦開源硬件

    電子發(fā)燒友網(wǎng)站提供《8085自制電腦開源硬件.zip》資料免費下載
    發(fā)表于 02-07 14:43 ?0次下載
    8085<b class='flag-5'>自制</b><b class='flag-5'>電腦</b>開源硬件

    Arduino自制一個只有表針的時鐘

    我們來一起看看如何用Arduino自制一個只有表針,沒有表盤的“空心時鐘”。
    的頭像 發(fā)表于 03-09 13:33 ?1342次閱讀

    ZS779自制Z80電腦開源分享

    電子發(fā)燒友網(wǎng)站提供《ZS779自制Z80電腦開源分享.zip》資料免費下載
    發(fā)表于 06-08 11:21 ?1次下載
    ZS779<b class='flag-5'>自制</b>Z80<b class='flag-5'>電腦</b>開源分享

    兒童樂高Arduino教程之眨眼草圖

    電子發(fā)燒友網(wǎng)站提供《兒童樂高Arduino教程之眨眼草圖.zip》資料免費下載
    發(fā)表于 07-10 15:15 ?0次下載
    <b class='flag-5'>兒童</b>樂高<b class='flag-5'>Arduino</b>教程之眨眼草圖