資料介紹
描述
?
![poYBAGNOSQCAH58CAACpPqYvDmY376.png](https://file.elecfans.com/web2/M00/70/CA/poYBAGNOSQCAH58CAACpPqYvDmY376.png)
理念
該項目是關于構建一臺運行 BASIC 且具有低成本組件的小型物聯網計算機。市場上有很多強大的硬件可以用于它。正確集成它們可以幾乎不花錢就能獲得大量計算能力。
這里展示的計算機在我家中用作 MQTT 顯示站。它連接到 Wifi,從 MQTT 代理讀取消息,顯示并記錄它們。它具有 PS2 鍵盤接口,可作為獨立系統使用。或者,可以通過串行或 USB 接口更改其上的程序。
我使用一些非常有趣的組件來構建它。配方的關鍵成分 Wemos D1 R1 板和 SD/DS1307 數據記錄器擴展板在沒有硬件修改的情況下是不兼容的。
這個項目的樂趣在于讓沒有為它正確設計的兩件事情一起工作。
Wemos D1 R1 板基于 ESP8266,看起來像 Arduino UNO。引腳排列在某種程度上與 UNO 相同,這可能會產生誤導。一些 ESP8266 引腳具有不同的功能,這使得在 Wemos D1 上使用 UNO 屏蔽層變得困難。Wemos 試圖將他們定位為 Arduino UNO 的競爭對手。一段時間后,他們停止了網站和制造。這些電路板仍然以每塊 6 歐元的價格從第三方供應商處出售。它們提供了大量的處理能力和內存。
配方的第二個成分是數據記錄器防護罩。這些屏蔽是為 UNO 設計和制造的,包含一個 DS1307 實時時鐘、一個 SD 卡座和一個小型原型區域。許多中國制造商從 2010 年左右開始遵循和原創設計。每件售價 4 歐元。
這兩個組件的典型價格為 10 歐元。
現在,如果您只是將屏蔽板插入電路板并嘗試使其運行,您會感到失望。ESP8266 CPU 甚至無法啟動。原因是數據記錄屏蔽的設計者對 Arduino 規范的解釋非常狹隘,而 Wemos 板的設計者對它們的解釋非常慷慨。
所有這些都可以通過一些盾牌改裝來克服。這使項目更先進一些。本教程是關于其中一些組件和所使用技術的內部工作原理。
修復 Shield 上的 SPI
![pYYBAGNOSQKAAmeaAAEqkmigaMU58.jpeg](https://file.elecfans.com/web2/M00/71/5D/pYYBAGNOSQKAAmeaAAEqkmigaMU58.jpeg)
屏蔽使用引腳 10、11、12 和 13 用于 SPI,這是 Arduino UNO 標準。引腳 10 是從機選擇引腳 SS。為了避免 SPI 從設備在啟動期間被激活,屏蔽用一個小電阻將引腳 10 拉高。這在使用 SPI 外設時并不少見,也是很好的做法。
Wemos 板的設計者已將 ESP12 的一個數字輸出連接到此引腳。他們將其命名為 D10,甚至在板上將其標記為 SS。
不幸的是,他們為此使用了 ESP12 的 GPIO15 引腳。
現在,如果在啟動過程中將此引腳拉高,ESP8266 板將不會啟動。這意味著幾乎沒有使用 SPI 和(正確)將 SS 拉高到高電平的屏蔽將在 Wemos D1 板上運行。電路板設計人員本可以使用任何其他 ESP12 GIO,但這會使他們的生活變得更加復雜,因為它會使電路板布局更加復雜。
一個簡單的解決方案是簡單地將 D10 引腳向上彎曲或完全移除,如第一張圖片所示。
通過此修改,微控制器將正確啟動。
要在屏蔽板上使用 SD 卡,Arduino 的另一個引腳必須連接到板的引腳。最好的選擇是使用 D8。它靠近引腳 10,在 ESP8266 上沒有特殊功能。它是一個無中斷引腳,只能用作數字 I/O。
為了使屏蔽工作焊接一個小鏈接,從板上的引腳 8 到引腳 10。現在可以使用SD卡了
修復 I2C 接線
![poYBAGNOSQaAPGT_AADzToG3NoI120.png](https://file.elecfans.com/web2/M00/70/CA/poYBAGNOSQaAPGT_AADzToG3NoI120.png)
Wemos 開發板使用左上角復位按鈕旁邊的引腳用于兩個 I2C 信號 SDA 和 SCL。這些引腳與 SDA 的 GPIO 4 和 SCL 的 GPIO 5 連接。這些是標準的 ESP8266 I2C GPIO。這兩個引腳也連接到 D3 和 D4。
Arduino UNO 的左上角也有 SDA 和 SCL 引腳。他們還使用電路板另一側對角線的 A4 和 A5 引腳。兩組引腳相連。
Wemos D1 電路板設計師沒有這樣做。電路板右下角的引腳 A2-A5 未連接。他們也可以將 A4 和 A5 連接到標準的 ESP8266 I2C 引腳,但他們沒有這樣做。
不幸的是,屏蔽在引腳 A4 和 A4 上需要 SDA 和 SCL。沒有額外的 SDA 和 SCL 引腳。
這可以固定在屏蔽上,添加兩條線以連接示意圖中所示的正確引腳。
通過這兩個修改可以在 Wemos 上使用盾牌。有一個實時時鐘、一個 SD 卡和一個適用于所有類型傳感器的工作 I2C 總線。
![pYYBAGNOSQiAW8t6AADpdhh4i8s074.png](https://file.elecfans.com/web2/M00/71/5D/pYYBAGNOSQiAW8t6AADpdhh4i8s074.png)
添加鍵盤插座
![poYBAGNOSQuAK7D_AAEt2HebBOY13.jpeg](https://file.elecfans.com/web2/M00/70/CA/poYBAGNOSQuAK7D_AAEt2HebBOY13.jpeg)
要構建獨立計算機,需要鍵盤。PS2 鍵盤可以輕松連接。PS2 插座也可用于連接其他外圍設備。
PS2 需要兩個引腳,一個用于時鐘信號,另一個用于數據輸入。時鐘引腳必須準備好中斷。帶屏蔽的 Wemos 唯一空閑的中斷就緒引腳是引腳 9。引腳 8 不能用于 ESP8266 上的中斷。這就是為什么針腳 8 用于從機選擇而針腳 9 在屏蔽改裝中空閑的原因。引腳 2 可用于 PS2 插座的數據連接。如圖所示,將引腳連接到 PS2 連接器。時鐘到引腳 9 和 8 到數據。
完整的屏蔽現在頂部有很多電線,可以安裝在 Wemos D1 R1 板上。如果我在實驗室中使用這些部件,我通常將它們放在一小塊膠合板上并添加一塊面包板。
![pYYBAGNOSQ2ATeYKAAC_jyZHC8g215.png](https://file.elecfans.com/web2/M00/71/5D/pYYBAGNOSQ2ATeYKAAC_jyZHC8g215.png)
上傳軟件
您需要在您的計算機上安裝一個具有 ESP8266 板定義的 Arduino IDE。http://arduino.esp8266.com/stable/package_esp8266com_index.json。有很多關于如何將 IDE 與 ESP 一起使用的教程,所以我不會在這里寫任何關于它的內容。
我在這個硬件配置上使用我的 IoT BASIC 解釋器。如果你想這樣做,請從我的倉庫https://github.com/slviajero/tinybasic/tree/main/TinybasicArduino 下載軟件。
首先您需要在 TinybasicArduino.ino 中設置語言設置。
#define BASICFULL
設置定義 BASICFULL。這將編譯一個功能齊全的 BASIC 解釋器。
解釋器是一個全新的實現。盡管文件夾名稱為 Arduino Tiny BASIC,但沒有使用任何部分。它實現了 80 年代強大的 BASIC 解釋器的大部分功能以及更多功能。
您需要編輯文件 hardware-arduino.h 并設置定義
#define WEMOSSHIELD
代碼開頭的所有其他硬件定義都應該是#undef。
這將為此配置設置所有必要的硬件參數。如果你想使用 PS2 鍵盤,請從https://github.com/slviajero/PS2Keyboard 下載我修補的 PS2 庫。未經修改的 Arduino 庫不適用于 ESP8266。您還需要 uRTCLib https://github.com/Naguissa/uRTCLib ,可以在 Arduino IDE 中下載。
編輯文件 wifisettings.h 并輸入您的 WLAN 設置。
使用 Arduino IDE 的 ESP8266 板菜單中的板設置 Wemos D1 R1 編譯草圖。最后插入格式化的 SD 卡。上傳軟件后,在連接 Arduino 串行監視器時,您應該會看到 BASIC 輸入提示。
Stefan's Basic 1.4a Memory 41000 1014
memory 之后的第一個數字是 RAM,第二個是 EEPROM 大小。
在此處輸入 netstat 命令將顯示 Wifi 和 MQTT 服務器狀態。系統會回答。
> netstat
如果 Wifi 連接成功。
添加顯示器
![pYYBAGNOSRCATx3aAABomOEiTdM288.png](https://file.elecfans.com/web2/M00/71/5D/pYYBAGNOSRCATx3aAABomOEiTdM288.png)
對于這個擴展,您需要一個帶有 I2C 接口的 20x4 LCD 顯示器。較小的顯示器也可以使用,但必須在 BASIC 代碼中更改顯示尺寸。
關閉系統電源,然后將顯示器連接到 5V 和 GND 電源引腳以及微控制器的 SCL 和 SDA 引腳。重新啟動系統。
PRINT &2, "hello world"
應該在屏幕上顯示文本。
PUT &2, 12
清除屏幕。12 是換頁的 ASCII 值。&2 是顯示輸出流。顯示器可以滾動并具有用于光標控制的 VT52 控制字符子集。
如果您沒有看到任何東西,請檢查顯示屏背面的亮度控制。
從 BASIC 寫入 MQTT 消息
BASIC 命令的概述以及如何使用 IoT BASIC 可以在我的 wiki 上找到。該語言主要是標準 BASIC 語言,有一些差異,例如 Apple 1 風格的字符串處理和 IoT 輔助函數。
本教程將主要關注 BASIC 解釋器的 MQTT 特性。MQTT 作為概念驗證代碼內置,具有未加密和未經身份驗證的通信。MQTT代理地址編譯成代碼:
const char* mqtt_server = "test.mosquitto.org";
這是 mosquitto 測試服務器。可以使用任何其他開放的 MQTT 代理。
通過首先打開具有主題名稱的 MQTT I/O 流來啟動對 MQTT 主題的寫入。
OPEN &9, "iotbasic/data" ,1
&9 是 BASIC 中的 MQTT I/O 流,字符串是主題名稱,1 是打開流進行寫入的標志。netstat 命令現在應該顯示如下輸出
> netstat
輸出主題設置為指定值。使用 PRINT 命令向該主題發送消息
PRINT &9, "hello world"
網絡狀態現在應該是
> netstat
MQTT 狀態 0 表示連接處于活動狀態。MQTT 名稱是隨機設置的,以使其唯一。如果您在客戶端程序上收聽該主題,您可以看到該消息。我推薦來自https://www.easymqtt.app的 EasyMQTT 應用程序。
從 BASIC 讀取 MQTT 消息
可以使用命令打開流以供讀取
OPEN &9, "iotbasic/commands", 0
標志 0 打開流進行讀取。從像 EasyMQTT 這樣的 MQTT 客戶端向主題發送消息將導致消息被緩沖,以便通過后臺任務在 BASIC 中讀取。BASIC 函數 AVAIL(9) 檢查是否有要讀取的數據。如果
PRINT AVAIL(9)
傳遞一個大于 0 的值,您可以輸入并顯示消息
INPUT &9, A$
BASIC 將通過保持活動機制無限期地保持讀取流打開和活動。如果與 MQTT 服務器的連接失敗,它會自動重新連接。如果未指定讀取主題,則 MQTT 連接會在一段時間后關閉,但在下一次 PRINT 到通道 &9 后重建。所有后臺任務和 ESP8266 特定的 yield() 機制也由 BASIC 解釋器處理。
測量數據并通過 MQTT 發送數據
![pYYBAGNOSRaAGerhAABTWWeBDEQ977.png](https://file.elecfans.com/web2/M00/71/5D/pYYBAGNOSRaAGerhAABTWWeBDEQ977.png)
連接到此類電路板的典型設備可能是土壤濕度傳感器。每個 Arduino 愛好者都會在某個地方放置一個。或者,也可以使用模擬光傳感器。
將傳感器連接到電源和屏蔽的模擬輸入 A0。
在 BASIC 中,使用 AREAD() 函數讀取模擬數據。通過鍵入檢查傳感器
PRINT AREAD(AZERO)
根據 Arduino 模擬數據的約定,輸出應該是 0 到 1023 之間的值。
定期測量土壤濕度并將數據傳輸到 MQTT 代理的小型 BASIC 程序可能如下所示:
10 OPEN &9,"iotbasic/data",1
在控制臺中輸入后,保存程序
SAVE "hum.bas"
到 SD 卡。然后使用 RUN 啟動程序。您應該每秒都可以看到 MQTT 消息進入您的 EasyMQTT 應用程序。通過串行控制臺發送 # 字符可以中斷程序,然后返回命令提示符。
如果以名稱保存程序
SAVE "autoexec.bas"
系統重啟后會自動啟動。通過這種方式,您可以斷開微控制器與計算機的連接,將其連接到電源或電池,然后開始將其作為獨立的傳感器系統運行。
與交互模式一樣,從控制臺發送 # 將停止程序并讓您訪問命令提示符。
激活實時時鐘
實時時鐘必須設置一次才能運行。使用 BASIC 中的特殊數組 @t() 設置時間。可以通過輸入將時鐘設置為 2022 年 3 月 6 日星期日 14:10:00
@t(0)=0 : @t(1)=10 : @t(2)=14 : @t(3)=6 : @t(4)=3 : @t(5)=22 : @t(6)=0
在 BASIC 命令提示符之后。時間元素可以單獨顯示,也可以使用特殊字符串@t$ 一起顯示。
PRINT @T$
將會呈現
14:10:02-6/3/22
將數據保存到 SD 卡
多輸入幾行來修改上面的程序
50 OPEN &16,"hum.dat",2
保存程序,然后運行它。您應該會在 MQTT 通道中看到數據。
過了一會兒,斷開微控制器與計算機的連接,取出 SD 卡并查看上面的文件 hum.dat。
它將逐行包含帶有時間戳和測量值的數據。OPEN 語句打開文件通道 &16,文件名為“hum.dat”,標志為 2,表示追加。該文件在每次寫入后關閉,以確保它正確刷新到磁盤。SD 卡可以取出并重新插入。
接收和顯示 MQTT 消息
![pYYBAGNOSRiASKZwAAAsVTzLfv8745.png](https://file.elecfans.com/web2/M00/71/5D/pYYBAGNOSRiASKZwAAAsVTzLfv8745.png)
輸入 NEW 清除程序存儲,然后進入一個小型 MQTT 閱讀器程序。
10 OPEN &9,"iotbasic/commands",0
輸入保存程序
SAVE "display.bas"
并使用 RUN 運行它。
當程序運行時,使用 EasyMQTT 向主題 iotbasic/commands 發送 MQTT 消息,并在 LCD 屏幕上看到它們顯示在相應的時間戳上。
BASIC 程序中的第 20 行每秒檢查傳入消息并循環直到到達消息。請注意,MQTT 消息是由系統異步接收的。真正的 MQTT 客戶端循環隱藏在 BASIC 解釋器中。它以 32 毫秒的速度運行。
連接鍵盤
![poYBAGNOSRuABdzbAACdqh5Nw0I484.png](https://file.elecfans.com/web2/M00/70/CA/poYBAGNOSRuABdzbAACdqh5Nw0I484.png)
我們現在準備連接鍵盤并使計算機獨立。
PS2 不可熱插拔。請斷開微控制器與計算機的連接,插入鍵盤,然后重新連接。某些 PS2 鍵盤在開機時無法正確初始化。他們需要大量電力,并且為內部電容器充電需要的時間太長了。如果發生這種情況,請暫時斷開系統的電源并重新連接。觀察鍵盤狀態行。
鍵盤 IO 是通過 BASIC 中的輸入通道 &2 完成的。像這樣的代碼
INPUT &2, A$
讓您從鍵盤輸入數據。
如果這可行,您可以使用標志重新編譯解釋器
#define STANDALONE
這使它成為一個獨立系統,默認為鍵盤和顯示 I/O。在我的維基https://github.com/slviajero/tinybasic/wiki或章節https://github.com/slviajero/tinybasic/wiki/Projects:-3.-Rockwell-AIM-65中閱讀有關此內容的更多信息- 相似計算機
關于這個和那個的結束語
邪惡的電子產品
你們中的一些人可能已經注意到我們正在做的一些事情中的邪惡部分。ESP8266 是 3.3V 機器。該芯片未指定用于 5V 操作。然而,我們將 PS2 鍵盤連接到它。它需要 5V,并將更高的電壓施加到 Wemos D1 R1 的輸入引腳上。實際上,我們的外圍設備應該炸芯片。
當它出現在市場上時,有很多討論板是否可以承受 5V。官方和規范從來都不是。實際上是這樣,Wemos 的某個人也在用戶論壇中聲明了這一點。
我在其 I2C 總線上嘗試了各種 5V 組件,它們都工作正常。這就是為什么盡管它的設計存在缺陷,但我還是非常喜歡該板。它不是初學者板,但它有很大的潛力。
為什么選擇 BASIC?
為什么要使用 BASIC 這種最過時的編程語言來做物聯網?Lua 和 Python 更適合它。C++ 是大多數微控制器軟件的實現語言。為什么使用基于 1977 年語言概念的 BASIC 方言而不是較新的方言?
首先,因為從頭開始創建一種編程語言,擁有代碼并根據自己的需要進行修改是很有趣的。
其次,我觀察到我的大多數物聯網程序都有一個非常簡單的邏輯。它們屬于“讀取傳感器并每 10 秒廣播一次值”的類型。使它們變得復雜的是硬件集成、傳感器代碼、I2C 和 SPI 協議以及 MQTT 連接的東西。所有這些復雜性都封裝在目前大約 200 kB 的 BASIC 解釋器代碼中。簡單的部分可以在 BASIC 中非常快速地完成。
第三,BASIC 解釋器從非常小的 Arduino UNO 系統擴展到 ESP32 和 Raspberry PI。它是一些具有相同特征的語言。小型 BASIC 程序在這些不同的系統之間是完全可移植的。我仍然為 AVR 168 CPU 編譯最小版本的解釋器,以確保它保持緊??湊。它既穩定又快速,因為它避免了舊 BASIC 的一些緩慢的東西。它完全標記化并非常經濟地處理內存。它具有確定性和實時性。
更多的東西來
Wifi 和 MQTT 代碼只是概念證明。需要加密和認證的 MQTT。LoraWAN 正在準備中。對于 Lora,我使用了 Heltech Lora 系統,該系統具有許多有趣的功能。
使用的庫
董事會鏈接
有關 BASIC 計算機的更多信息
![poYBAGNOSR2AQDZwAAB7Q-Z6MpY570.png](https://file.elecfans.com/web2/M00/70/CA/poYBAGNOSR2AQDZwAAB7Q-Z6MpY570.png)
還有一些基于此軟件的計算機。
如果您需要 80 年代風格的家用電腦,您可能想看看這個教程https://www.instructables.com/Build-a-80s-Style-Home-Computer-From-Scratch-From-/
帶有圖形的較小系統將是https://www.instructables.com/A-Arduino-RP2040-Standalone-IoT-Computer-Running-B/
它們是與 Wemos / 數據記錄器系統兼容的軟件。
- 小型計算機電源,機載計算機電源的小型化設計
- 小型機載計算機電源的設計
- DN1004-LED的高效低成本替代產品,用于背光手持計算機顯示器
- 大話計算機教程之狂想計算機PDF電子書免費下載 0次下載
- 《STM32物聯網實戰教程》單片機教學計算機網絡以及物聯網實戰概述 277次下載
- 計算機測控系統——面向對象語言Visual Basic課件下載.PPT 0次下載
- 低成本的計算機載板設計2 2次下載
- 低成本的計算機載板設計1 4次下載
- 基于物聯網的智能計算機實驗室管理系統 15次下載
- 中小水電站計算機監控系統運行維護
- 小型計算機控制系統的分析與設計
- 計算機應用基礎教案,下載 0次下載
- 計算機系統概論 0次下載
- 全國計算機等級考試(一級B)考試大綱
- 全國計算機等級考試新大綱(一級)
- 工業中使用哪種計算機? 195次閱讀
- 工業計算機類型介紹 255次閱讀
- 計算機接口位于什么之間 494次閱讀
- 什么是工業計算機(IPC)? 828次閱讀
- 計算機控制器的結構和功能 1806次閱讀
- 工業計算機與普通計算機的區別 1529次閱讀
- 工業無風扇計算機的優點 491次閱讀
- 計算機圖形學:探索虛擬世界的構建之道 441次閱讀
- 如何用繼電器構建計算機的CPU 2735次閱讀
- 如何利用Arduino DUE實現家用計算機的設計 4856次閱讀
- 基于計算機串行口實現步進電機控制系統的應用設計 3268次閱讀
- 計算機輔助技術有哪些_計算機輔助技術的應用 4w次閱讀
- 如何實現大區域物聯網的低成本全覆蓋 4384次閱讀
- 采用物聯網RFID技術構建的智能圖書管理系統淺析 1748次閱讀
- 計算機網絡有哪些作用_計算機網絡硬件有哪些 1.1w次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論