想知道我們在上週從名片工作中的Web服務器在名片工作中完成了什麼?它是推動巨型LED塗鴉牆。動畫可以使用Internet Designer的用戶提交。您也可以觀看單個動畫的在線饋送。 Internet界面上的互聯網界面運行在Google App Engine上,以獲得最大可擴展性以及彈性。
在今天的方式,我們涵蓋了所有的INS以及從建立自己的網絡塗鴉牆上。
概念概述
塗鴉序列採用JavaScript動畫設計師在互聯網上設計。已完成的序列驗證並保存在數據庫中;我們為PHP / MySQL以及Google Apps(Python)製作了數據庫後端。序列由簡單的數據送達API進行了混合。我們的迷你Web服務器從Feed中檢索動畫序列,以及在SD卡上緩存它們。最後,序列顯示在巨型LED矩陣上。
大,低分辨率顯示屏
我們的塗鴉屏幕是一個1米方形,5×5矩陣的LED。幾年前,它受到棲息地提供的達斯朋克咖啡桌的影響。愚蠢的朋克桌產生了許多DIY複製品,包括在建造一個愚蠢的朋克桌上的這種優秀的指導。隨著時間的推移,這種模式變成了許多排列,例如我們的“愚蠢的朋克桌子”壁掛。提供各種大,閃爍的家具,我們尋求比“達斯朋克桌”更好的術語。我們提出了“大,低分辨率顯示”或LLRD for Short(發音為’Lard’)。
原來的愚蠢的朋克表隨機閃過,或者及時到音樂。 [Mathieu RonCheau]的副本表在EEPROM中保存了動畫序列。我們的第一種風格通過將動畫數據存儲在胖格式的SD卡上進一步邁出了這一步。現在,我們已經將設計師放在互聯網上,以確保我們可以通過Internet獲取用戶提交的動畫序列。
在線界面
LLD的塗鴉動畫是用簡單的JavaScript序列製造商生產的。觀看用戶提交的動畫的在線饋送,或自己嘗試。塗鴉序列設計器以及為PHP / MySQL以及Google App Engine寫入的數據後端包含在作業存檔中。
JavaScript Graffiti序列設計器易於使用:
單擊框以切換動畫每幀中顯示的LED。
使用箭頭按鈕在幀之間導航。
備份以及帶回工具提供了一種簡單的方法,可以在文本文件中本地保存序列。
“添加文本框架”插入利用位圖字體的字符幀。如果您不喜歡默認字體,只需生成一個新的字體:
單擊“編輯字體”按鈕以縮短現有字體。
進行修改。
單擊“更新字體”以將默認字體樣式替換為新幀。
字體樣式數組是區域之間的ASCII字符的查找表以及Z(ASCII字符32到90,“!”#$%&’()* +, – 。/ 0123456789:<=>? @abcdefghijklmnopqrstuvwxyz“)。要永久添加新字體樣式,只需將更新的FontSet粘貼在符合“FONT =”變量的JavaScript代碼中。備份框中的“字體格式”選項將生成可變格式化的位圖,這些位圖準備粘貼現有字體。
完成動畫後,在作者框中進入您的名字以及新聞報告。序列代碼將生成並發送到服務器。
基於Internet JavaScript的塗鴉設計師受到[Mathieu RonCheau]的離線版本的影響。 [mathieu]的delphi源代碼以及可執行文件在此處存檔。我們的JavaScript型設計器具有一些附加功能,是基於瀏覽器的,以及它不需要您運行一個未知的.exe文件。即使它意味著在Web上運行,Designer也將同樣從計算機上的區域副本工作。
該腳本將為任何類型的任意矩陣工作,只需修改DPTROWS以及DPTCLS變量到LLRD的尺寸。
在線觀看者利用異步http(ajax-ish)請求來顯示用戶提交的塗鴉動畫的流媒體。它將嘗試設置一個cookie,以確保每次頁面加載時都可以以新的序列開始。如果您沒有啟用cookie,則在下次訪問時剛剛在0開始才開始。
序列位圖格式
序列構建器將每列輸出為ASCII格式化位圖。每個列的位圖由空格分隔,並且每個全幀都以線饋送(NR)終止。這種風格由[Mathieu RonCheau]的PC序列儀計劃定義,我們將其保存為向後兼容性。
位圖數據在幀的左上角歸零。每列的頂部單元是位0,以及底部小區是比特4.遵循基本數學符號的似乎更合理,並且利用底部左屏幕作為原點,但我們沒有擬定規範。
價值foR在二進制數中處理Lit LED為1,以及轉換為十進制,通過處理每列。例如,上面的第一列是10000二進製或1個小數。最後一列是11111二進制,或十進制31.您可以使用Internet二進制計算器的交換確認我們的轉換。
請注意,列位圖由實際十進制值的ASCII等效項表示。根據ASCII標準編碼數字數字,這是實際值加0x30h。此外,多位數字保存為私有字符;在該示例中24保持為0x32h,0x34h。
服務器端
後端是一個簡單的軟件應用程序,接受動畫序列,是否有一些驗證,以及將它們保存到數據庫中。保存序列可從數據郵件API訪問。
後邊
我們組成了兩個版本的後端;兩者都在作業檔案中。首先是Internet LLD中的低卷的簡單PHP / MySQL後端,另一個是Google App Engine / Python版本,應該能夠處理一天讀者的很多黑客。
為您的首選平台構成後端,它真的很簡單。修改塗鴉設計師的提交類型行動以指向您的後端;這兩個版本目前都發佈到backend.php。現在,捕獲服務器上的“作者”以及“SEQ”變量,並將其保存到數據庫中。
我們的後端執行一點驗證以防止對系統的攻擊。我們在階段進行了檢查,因此它們不會浪費許多資源。首先,檢查提交的一般規模以確保其在原因內。接下來,將序列分成私幀,並且每個都被檢查為表單。如果通過驗證,它將保存到數據庫中。
飼料API.
序列可通過簡單的數據送達API訪問。 API有兩個變量:
http://graffiti-me.appspot.com/feed.php?max=1&last=0
最大 – 發送的最大序列數。
最後 – 讀取最後一個序列,只發送較新的數據。
該數據遞交以字符’#’開始每個動畫序列,符合身份證號碼以及行饋送。 ‘#’是一個無效的位圖值,可警告客戶端到新序列的開頭。客戶端可以利用API的上次變量的ID號以在每個拉動上獲取新序列。
硬件
迷你Web服務器
我們使用PIC24F Mini Web服務器作為此項目的TCP支持的客戶端。檢查我們以前的文章,以發現如何開發Web服務器。
愚蠢的朋克表
[MRGALLETA]有一個夢幻般的建築教程,適用於DAFT PUNK表副本的實際表。雖然,LLRD可以採取許多形式,例如我們的牆壁。
大多數DAFT PUNK表副本樣式由74HCT595(PDF)輸出擴展器以及ULN2803A(PDF)晶體管陣列進行管理。該指示器的驅動板將兩者組合成易於蝕刻的通孔PCB。每個驅動板有兩個74htc595s,或16個輸出;我們需要兩個駕駛板,為我們的25個單元格LLRD。
74HCT595是由類似SPI的接口管理的串行輸出膨脹機。通過刪除鎖存線啟動更新。將每個LED(開或關)的指定放在數據線上,遵循時鐘的脈衝。當閂鎖信號返回高電平時,位在輸出引腳上。數據從數據輸出引腳級聯一個595,到下一個數據輸入。檢查了74xx595教程,詳細介紹了接口此設備。
值得注意的是,我們利用74HCT595,而不是74HC595。 “HCT”部件在各種電壓上工作,包括Mini Web服務器的工作電壓:3.3Volt。
74HCT595源電流,這意味著我們可能很可能直接從3.3Volts的每個輸出直接運行單個LED。由於大多數LLRD具有每個單元格的2-8個LED,因此在5之間以及24Volts之間操作,我們利用了ULN2803A晶體管陣列來切換更大的負載。 uln2803a下沉電流,而不是採購它;它切換LED的接地連接,而不是電源。
我們的LLRD每扇區有兩個LED,在20mA下運行,5伏電源以及56Ohm電阻。我們在一塊紙板周圍焊接LED,而不是蝕刻25個小型電路板。
連接
迷你Web服務器和驅動板之間的5個電纜連接控制LLRD。
服務器
LLRD.
描述
v +
vsys.
3.3 595s的電源。
GND.
GND.
共享地面連接。
ra0.
數據in.
數據信號。
ra1.
鐘
時鐘信號。
RB15.
閂鎖
鎖存信號。
–
v
LED電源。
固件
我們的固件使用MPLAB和Microchip C30演示編譯器編寫的C.了解有關編程的更多信息以及在我們的介紹性教程中使用PIC24F。作業存檔中包含兩個固件版本。首先剛剛從SD卡中讀取所有* .seq序列數據,第二個版本為Web連接添加了Microchip TCP / IP堆棧。迪更多關於Microchip SD卡以及我們迷你Web服務器教程中的TCP / IP庫的更多信息。
可以在Graffitigfx.c中發現所有圖形功能,包括TCP客戶端。 TCP客戶端基於TCP / IP堆棧中包含的通用TCP客戶端示例。我們遵守Microchip的合作多任務方法,並將代碼剪髮為與TCP / IP堆棧的其餘部分共享CPU時間的小段。
客戶端定期鏈接到數據郵件以及請求新序列。新序列被解析為ID號,以及附加到SD卡上的臨時數據。檢測到的最後一個ID被寫入臨時數據文件的極端末端,並且附加到後續數據饋送請求上的URL的最後變量。我們在數據末尾記錄ID以防止重複組成在SD卡上的完全相同的扇區。理想情況下,1GB SD卡內的佩戴水平足以防止最初幾十年的問題。如果沒有可用網絡連接,則小工具在SD卡的根目錄中播放任何類型的* .seq數據。
解析器函數對幀進行解碼,並將它們發送到LLRD。解析器對錯誤相對強大。使其在後端驗證例程中的數據不佳將在小工具級別拒絕沒有生病效果。如果一些腐敗框架可以處理展示,它幾乎不會被注意到在牆上的其他抽像圖案中被注意到。
1
2
3.
#define gfx_use_tcp_client //包含TCP客戶端
#define gfx_tcp_only //只做TCP以及被檢查的臨時文件,請勿在SD卡上簽出其他數據。
#define gfx_clear_temp_on_reset //可選地刪除重置時的TEMP數據。非常適合Google App Engine …
在graffitigfx.c的開始時三個定義管理編譯時包含哪些功能。 gfx_use_tcp_client使用已啟用的TCP客戶端編譯固件,評論此含義僅適用於固件的SD卡版本。 gfx_tcp_only忽略了SD卡上的任何類型的.seq數據,以及僅播放從Web下載的序列。 gfx_clear_temp_on_reset選擇將刪除每個複位上的臨時序列數據;這對於具有非順序記錄ID的數據庫非常有用,如Google數據存儲。將來,這些定義可能會被改變為由SD卡上的配置數據設置的變量。
進一步選擇
我們的簡單固件是互聯網塗鴉牆上的穩定起點。雖然我們正在努力做這項工作,我們提出了一大批額外的功能,並沒有進入原型。
在啟動時顯示IP地址。
SD卡上的配置數據設置數據饋送URL,刷新頻率以及其他變量。
用於遠程配置的Telnet或Web界面。
TCP服務器,用於直接訪問顯示器;從遠程PC推送動畫框架。
郵件客戶端報告錯誤以及條件信息。
啟動期間的進度消息以及序列下載。 SD卡不存在/完全錯誤。
滾動Twitter Feeds。
你的意見?
不要剛剛簽出這個項目,為塗鴉牆貢獻一些框架。
下次我們將介紹我們的最終PIC24F項目,這是一個以太網背包,用於SparkFun Electronics的小$ 20彩色諾基亞LCD敲門聲。