# Raspberry Pi 4 從0開始 [TOC] ## 前言 > 本文使用 Raspberry Pi 4 Model B 8G 進行以下所有操作 [name=Jung] <br/> ## 無外接螢幕設定樹莓派 要完成**無外接螢幕設定樹莓派**,有線無線網路都可以,本文示範有線設定 ### 所需設備(無線) * 一台能分享網路的機器(手機也可,樹莓派跟電腦都要連得上) * 一張 MicroSD 卡 (8GB<=容量<=32) * 一個 MicroSD 讀卡器 * 一塊 Raspberry Pi 4 * Type-c 電源線 跟 變壓器 (>=10W) * 一台可連網路的電腦 ### 所需設備(有線) * 有網路孔的環境 * 一台路由器 (最好是沒有設密碼) * 三條網路線 * 一張 MicroSD 卡 (8GB<=容量<=32) * 一個 MicroSD 讀卡器 * 一塊 Raspberry Pi 4 * Type-c 電源線 跟 變壓器 (>=10W) * 一台有網路孔的電腦 ### 所需軟體 * [Raspberry Pi Imager](https://www.raspberrypi.com/software/) : 製作映像檔 MicroSD 卡 * [Advanced IP Scanner](https://www.advanced-ip-scanner.com/tw/) : 在區網找 Raspberry Pi 的 IP * [Putty](https://www.putty.org/) : 用 SSH 與 Raspberry Pi 連接 * [VNC Viewer](https://www.realvnc.com/en/connect/download/viewer/) : 完成設定後,連線使用樹莓派圖形化介面 上述軟體安裝過程不另贅述,有需要可自行搜尋 ### 前置作業 1. 將網路環境建置,用兩條網路線將路由器分別接上網路孔和電腦 2. 下載安裝設定[所需軟體](https://hackmd.io/e3GQbqMqTAmlHt3EEdg0QQ?both#%E6%89%80%E9%9C%80%E8%BB%9F%E9%AB%94) 3. 確定環境、設備一切正常 ### 製作映像檔 MicroSD 卡 1. 本文使用手邊的 **32G** 記憶卡 (>32GB 需格式化成 FAT32 格式) ![](https://hackmd.io/_uploads/rJzfehcD3.jpg) 2. 啟動後,先按**中間**選擇要用的 MicroSD 卡,按**左邊**選擇**擦除**,再按右邊**燒錄** ![](https://hackmd.io/_uploads/HywhEhdw2.png) 3. 擦除後,先按**中間**選擇要用的 MicroSD 卡,按**左邊**選擇**預設的OS** ![](https://hackmd.io/_uploads/rJap5hOv3.png) 按**齒輪**設置 **開啟SSH** 跟 **username 和 password** ![](https://hackmd.io/_uploads/S1GND3uPn.png) 設置無線網路 **SSID** 跟 **password** (想無線連接可做,有線可省略) ![](https://hackmd.io/_uploads/H1uiB2FPh.png) 設置後按**燒錄** ![](https://hackmd.io/_uploads/SJqncn_D3.png) 安裝成功 ![](https://hackmd.io/_uploads/S1XB13_wn.png) 映像檔 MicroSD 就完成了 ! ### 確認 Raspberry Pi 狀態 & IP 1. 將 **映像檔 MicroSD** 插進 **Raspberry Pi** 2. 用網路線連接 **路由器** 跟 **Raspberry Pi** 3. 插上 **Raspberry Pi 電源** 4. 完成上述步驟後,會看到樹莓派**紅燈(電源燈)恆亮**,**綠燈(記憶卡狀態燈)閃爍** 網路孔**橘燈、恆亮綠燈閃爍**,這樣表示一切正常 ([燈號說明](https://yanwei-liu.medium.com/raspberry-pi%E5%AD%B8%E7%BF%92%E7%AD%86%E8%A8%98-%E5%8D%81%E4%BA%94-%E6%A8%B9%E8%8E%93%E6%B4%BEled%E6%8C%87%E7%A4%BA%E7%87%88%E8%AA%AA%E6%98%8E-9f8caf9a244c)) 5. 開啟 **Advanced IP Scanner** 或 **路由器管理介面** 找出 **樹莓派 IP** ***「須注意,使用DHCP時,有線和無線可能各分配一個IP 如下圖,有線時 IP = 192.168.0.1;無線時 IP = 192.168.0.9 使用 Putty 跟 VNC Viewer 要確認,否則會 Connection time out」*** ![](https://hackmd.io/_uploads/HyjZG35wn.png) ![](https://hackmd.io/_uploads/Bk4U-h9Dn.png) ### SSH 連線 1. 啟動 **Putty** 2. **Host Name** 請填 **自己的樹莓派 IP**,並使用 **SSH (Port=22)** ![](https://hackmd.io/_uploads/ry7xr25D2.png) 3. 按下 **Open**,會看到下圖,並按下 **Accept** ![](https://hackmd.io/_uploads/r12Sdhtwh.png) 依照前面設定輸入**帳號、密碼**,看到下面代表成功連線 ![](https://hackmd.io/_uploads/HJ85_3tD2.png) 4. 在終端鍵入 **```sudo raspi-config```** 做設定 * 1 System Options > S1 Wireless Lan : TW Taiwn > SSID > passphrase 前面沒設,這裡可以 * 2 Display Options > D5 VNC Resolution : 建議設成 1280x720,解析度太高VNC會卡 * 3 Interface Options > I2 SSH : 已經 enable,可以確認一下 * 3 Interface Options > I3 VNC : 設成 enable,VNC 才能連入 * 5 Localisation Options > L1 Locale : 建議加入en_GB.UTF-8 * 5 Localisation Options > L2 Timezone : 選 Asia > Taipei ![](https://hackmd.io/_uploads/SJUT_hKDn.png) 設定完按 **Finish**,會問要不要重開機,選**Yes** 之後 Putty 會斷線,就設定成功了 ![](https://hackmd.io/_uploads/Sk2Gp3FPh.png) ### VNC Viwer 1. 開啟 **VNC Viwer**,**```Ctrl+N```** 建立新連線 ![](https://hackmd.io/_uploads/SJmui3qD3.png) 2. 照下方圖片勾選設定 * VNC Server : 樹莓派 IP (確定網路連線方式再輸入) * Name : 名稱 (自己命名) * 剩下照著勾選 ![](https://hackmd.io/_uploads/r14Tj35D2.png) ![](https://hackmd.io/_uploads/ByuOhnqwh.png) 3. 按下 **OK**,會新增一圖示,點擊**圖示**連線 ![](https://hackmd.io/_uploads/BycC23cwh.png) 4. 首次連線要**帳號、密碼**,照先前設定輸入,可依需求勾選 **Remember password** ![](https://hackmd.io/_uploads/BkHvp29vn.png) 5. ***成功 !!!*** ![](https://hackmd.io/_uploads/rJGBRhcPn.png) <br/> ## 在樹莓派上安裝 Mosquitto 1. 安裝 Mosquitto ```shell= sudo apt install mosquitto mosquitto-clients ``` 2. 確認安裝版本 ```shell= mosquitto -v ``` ![](https://hackmd.io/_uploads/H14Xq3BJa.png) ```shell= systemctl status mosquitto ``` ![](https://hackmd.io/_uploads/SJLj92HJT.png) ***亦可用 start / stop / enable... 來控制*** 3. 測試 Mosquitto ```shell= mosquitto_sub -h localhost -t hello/world ``` ***開另一個終端機執行*** ```shell= mosquitto_pub -h localhost -t hello/world -m "TEST" ``` ![](https://hackmd.io/_uploads/Sk3ncTBya.png) ![](https://hackmd.io/_uploads/HJui5aSJp.png) ## 在樹莓派上安裝 Node-Red 1. 安裝 Node.js ```shell= sudo apt-get install nodejs ``` 2. 安裝 npm (Node Package Manager,以 JavaScript 編寫的軟體套件管理系統。) ```shell= sudo apt-get install npm ``` 3. 確認環境版本 ```shell= Jung@raspberrypi:~ $ node -v v12.22.12 Jung@raspberrypi:~ $ npm -v 7.5.2 ``` 4. 安裝 Node-Red ```shell= sudo npm install -g --unsafe-perm node-red ``` ![](https://hackmd.io/_uploads/SJ2W8nSkp.png) 5. 啟動 Node-Red ```shell= node-red ``` ![](https://hackmd.io/_uploads/BkmdU3Ska.png) 6. 成功啟動!!! ![](https://hackmd.io/_uploads/BksAU3rk6.png) <br/> ## ESP32S with MongoDB ![](https://hackmd.io/_uploads/S1zT8H5zT.png) * ***Post*** ![](https://hackmd.io/_uploads/HJCVvBqGa.png) ![](https://hackmd.io/_uploads/B1AJdr9MT.png) ![](https://hackmd.io/_uploads/Syhy5L9Ma.png) * ***Get*** ![](https://hackmd.io/_uploads/BkR_kooMa.png) ![](https://hackmd.io/_uploads/HkqTJooGa.png) ![](https://hackmd.io/_uploads/B1rygjofp.png) * ***Setting Functions*** ![](https://hackmd.io/_uploads/B1ireisfa.png) ![](https://hackmd.io/_uploads/rJQW7ioGa.png) ```java= exports = function({ query, headers, body}, response) { const newBody = JSON.parse(body.text()); const myPassword = "0909160217"; const password = newBody.password; const newObject = { "spo2": newBody.spo2, "beat": newBody.beat, "mood": newBody.mood, } if(password == myPassword){ const doc = context.service.get("mongodb-atlas").db("myDB").collection("myCollection").insertOne(newObject); } else{ return "Not a valiad user"; } return newObject; }; ``` ```java=1 /*exports = function({query, headers, body}, response) { let date_ob = new Date(); let year = date_ob.getFullYear(); let date = ("0" + date_ob.getDate()).slice(-2); let month = ("0" + (date_ob.getMonth() + 1)).slice(-2); let hours = ("0" + date_ob.getHours()).slice(-2); let minutes = ("0" + date_ob.getMinutes()).slice(-2); let seconds = ("0" + date_ob.getSeconds()).slice(-2); console.log(year + "-" + month + "-" + date + " " + hours + ":" + minutes + ":" + seconds); return 0; };*/ exports = function({query, headers, body}, response) { let date_ob = new Date(); let year = date_ob.getFullYear(); let date = ("0" + date_ob.getDate()).slice(-2); let month = ("0" + (date_ob.getMonth() + 1)).slice(-2); let hours = ("0" + date_ob.getHours()).slice(-2); let minutes = ("0" + date_ob.getMinutes()).slice(-2); let seconds = ("0" + date_ob.getSeconds()).slice(-2); const newBody = JSON.parse(body.text()); const myPassword = "20030217"; const passwd = newBody.password; const newObj = { "spo2": newBody.spo2, "beat": newBody.beat, "time": newBody.time, "timestamp": year + "-" + month + "-" + date + "T" + hours + ":" + minutes + ":" + seconds + "Z", } if(passwd == myPassword){ const doc = context.services.get("mongodb-atlas").db("myDB").collection("myCollection").insertOne(newObj); } else{ return "Not a valiad user"; } return newObj; }; ``` ![](https://hackmd.io/_uploads/r1074jjf6.png) ![](https://hackmd.io/_uploads/HJ6g4ijzp.png) ```java= exports = function({ query, headers, body}, response) { const doc = context.service.get("mongodb-atlas").db("myDB").collection("myCollection").find().sort({_id:-1}).limit(10); return doc; }; ``` * ***Review & Deploy*** ![](https://hackmd.io/_uploads/B1BAVjsGT.png) ![](https://hackmd.io/_uploads/SJD94ooMp.png) ### How to find app service on new MongoDB 1. 在Overview頁面左側找出**Triggers** ![截圖 2025-03-20 13.51.57](https://hackmd.io/_uploads/BJPoCXFnyl.png) 2. 在Triggers頁面右側找出**View All Apps** ![截圖 2025-03-20 13.55.08](https://hackmd.io/_uploads/rJu2A7Yn1e.png) 3. 在Applications頁面下方找出**原來的Application** ![截圖 2025-03-20 14.00.44](https://hackmd.io/_uploads/BJoUkVKnye.png) 4. 便可找出原本的頁面及功能 ![截圖 2025-03-20 14.03.43](https://hackmd.io/_uploads/HyIZxEtnkx.png)