山東省招遠(yuǎn)第一中學(xué)牟曉東
作為國內(nèi)開源硬件的杰出代表,掌控板是一款非常優(yōu)秀的國產(chǎn)“創(chuàng)客”微控制器板,支持Python代碼編程以及Mind+、mPython等主流圖形化編程軟件。使用單塊掌控板進(jìn)行編程,可以實(shí)現(xiàn)噪音計(jì)、身高測量儀、高溫報(bào)警系統(tǒng)和天黑自動(dòng)收衣服系統(tǒng)等案例;如果有兩塊掌控板,就可以借助藍(lán)牙與WiFi雙無線通訊,遵循MOTT(消息隊(duì)列遙測傳輸)協(xié)議在SIoT開發(fā)平臺(tái)(如Mind+的SIoT本地物聯(lián)網(wǎng)、DFRobot的Easy IoT)或OneNET(移動(dòng)物聯(lián)網(wǎng)開放平臺(tái))等開放平臺(tái)上進(jìn)行更為豐富的物聯(lián)網(wǎng)應(yīng)用創(chuàng)意項(xiàng)目設(shè)計(jì),比如實(shí)現(xiàn)諜戰(zhàn)影視片中摩爾斯電碼的發(fā)送與接收。
摩爾斯電碼( Morse code)是一種通過不同的排列順序來表達(dá)相關(guān)字符(比如26個(gè)英文字母)的數(shù)字化通信形式,它的最基本代碼是“滴”和“嗒”,分別對應(yīng)短促的“一個(gè)點(diǎn)”信號(hào)和“一個(gè)劃”信號(hào),“一劃”相當(dāng)于“三個(gè)點(diǎn)”的時(shí)長(如圖1)。在各種故事情節(jié)中最為經(jīng)典的摩爾斯電碼應(yīng)用,便是sos國際通用求救信號(hào)的發(fā)送——字母S的摩爾斯屯碼是“滴、滴、滴”三個(gè)點(diǎn),字母()的摩爾斯屯碼是“嗒、嗒、嗒”三個(gè)劃,通過開關(guān)手電筒控制電路通斷以光的形式,或是單根手指連續(xù)敲擊桌面以聲的形式,都能夠快速發(fā)送“三點(diǎn)、三劃、三點(diǎn)”的SOS求救摩爾斯電碼。

每個(gè)掌控板都有A和B兩個(gè)按鍵和P、Y、T、H、()、N六個(gè)觸摸鍵供我們選用。在發(fā)報(bào)方掌控板中進(jìn)行編程,將按鍵A和B分別設(shè)計(jì)對應(yīng)發(fā)送摩爾斯電碼的“滴”和“嗒”信號(hào),而將觸摸鍵P作為每組摩爾斯電碼(即所表示的某一個(gè)字符)的結(jié)束信號(hào),因?yàn)檎鎸?shí)地用摩爾斯屯碼發(fā)報(bào)字母間隔是一個(gè)“嗒”的時(shí)長(相當(dāng)于3個(gè)“滴”),單詞間間隔是7個(gè)“滴”,這需要專門訓(xùn)練才能做好,對于初學(xué)者來說操作難度較大,而簡單地“碰”一下觸摸鍵的動(dòng)作則非常方便。另外,為了對按鍵和觸摸鍵的按下與觸摸操作進(jìn)行即時(shí)反饋,還要添加RGB燈閃爍和蜂鳴器播放音符模擬“滴”“嗒”聲,比如三支RGB燈分別對應(yīng)按鍵A、B和觸摸鍵P的“動(dòng)作”:同時(shí),在收報(bào)方掌控板中也進(jìn)行同樣的編程控制方式,模擬實(shí)現(xiàn)摩爾斯屯碼的發(fā)報(bào)與收報(bào)的“聲光”同步響應(yīng),趣味性更強(qiáng)。
將一塊掌控板通過數(shù)據(jù)線連接至聯(lián)網(wǎng)電腦的USB接口,然后運(yùn)行rnPython進(jìn)行程序的編寫。
兩個(gè)掌控板之間能夠正常進(jìn)行信號(hào)的發(fā)送與接收的“對話”前提條件是暢通的網(wǎng)絡(luò)連接,因此程序的最開始必須是進(jìn)行聯(lián)網(wǎng)設(shè)置。從左側(cè)的“WiFi”中選擇第一項(xiàng)“連接WiFi名稱……密碼……”模塊語句,然后補(bǔ)充完整所使用的無線網(wǎng)絡(luò)名稱及密碼信息(明文顯示)。
在mPython的“擴(kuò)展”一“MOTT”中提供了若干種MOTT模塊,以其中的“MOTT-Easy IoT”為例(其他的用法基本類似),這是由DFRobot提供的物聯(lián)網(wǎng)MOTT服務(wù),需要從瀏覽器訪問網(wǎng)站(https://iotdfrobot.com cn/)先進(jìn)行免費(fèi)注冊,然后登錄進(jìn)入自己賬號(hào)的“工作間”;左側(cè)有兩處關(guān)鍵信息,一是“IoUd( user)”(即用戶名),將其值“XNbxt3rMR”復(fù)制粘貼至mPython編程中“MOTT-Easy IoT”模塊語句中的第三項(xiàng)“Iot_id”中;二是“Iot_ pwd(password)”(即密碼),可點(diǎn)擊“小眼睛”圖標(biāo)進(jìn)行顯示,將其值“uHxxpqrGRz”復(fù)制粘貼至第四項(xiàng)“Iot_pwd”中(前兩項(xiàng)“服務(wù)器”和“Client ID”均保持默認(rèn)值)。在“工作間”中執(zhí)行三次“添加新的設(shè)備”操作,分別重命名為“mPython_l”、“mPython_2”和“rnPython_3”,對應(yīng)三個(gè)Topic“主題”的數(shù)值,可分別復(fù)制并粘貼至記事本中保存,這些信息在收報(bào)方掌控板中也要用到(如圖2)。

再次返回mPython編程界面,從“MOTT”中選擇“連接MOTT”模塊語句,添加至“MOTT-EasyIoT”模塊語句后面,作用是根據(jù)之前的設(shè)置進(jìn)行MOTT連接。
先從左側(cè)的“顯示”中選擇“OLED顯示‘清空…模塊語句;再使用兩次“OLED第¨行顯示¨模式‘普通‘不換行…,控制OLED顯示屏的第1行、第2行分別顯示“連接MOTT-Easy IoT!”和“長江長江,我是黃河!”提示信息;最后要添加“OLED顯示生效”模塊語句(如圖3)。

為了進(jìn)行摩爾斯電碼的分解與重組,可以將二進(jìn)制代碼“0”和“1”與摩爾斯電碼的“滴”和“嗒”一一映射進(jìn)行組合編碼。比如:字母“A”的摩爾斯電碼是“滴、嗒”,在字典中為它設(shè)置“鍵”( Key)為“01”,“值”( Value)為“A”;再比如:字母8B”是“嗒、滴、滴、滴”,在字典中的“鍵”就是“1000”。對應(yīng)摩爾斯電碼的編碼規(guī)則,對字典變量my_dict進(jìn)行定義和初始化,完成26個(gè)大寫英文字母的“0”“1”編碼映射(如圖4)。