最新消息:

[系統測試中] 本論壇目前為測試營運階段,功能上有不完善之處還請見諒 :p

Main Menu

最新文章

#1
[管理] 我喜歡這份工作,但是...小心「壞摩擦」正在蠶食你的工作熱情

曾以員工或客戶身份與組織互動的人,或許都曾感覺過組織領導者不尊重底層員工的時間。這些摩擦會削弱我們對工作的熱情與投入,也會影響同事與服務對象,最終損害組織的生產力、創新與聲譽。

資料來源:https://www.cheers.com.tw/article/article.action?id=5103766
#2
[管理] 事業成功卻難有成就感?追求卓越前,先有意識的打造「自我認同」

多年來,我總覺得內心好像少了點什麼。無論我變得多成功、實現了多少目標,事後我總會感到失望。我以為自己會感到很充實,但實際上感覺到的卻是空虛。別誤會我的意思;把待辦清單上的事項做完後刪除的感覺很好,但更深層的成就感卻離我愈來愈遠。在花了幾年、甚至幾十年追求一個目標之後,我的感覺只有,那現在要怎樣?

資料來源:https://www.cheers.com.tw/article/article.action?id=5103717
#3
[管理] 在職場上自己的角色設定,比職稱還重要

很多人以為,自己對目前的工作沒興趣,往後也沒有想要往這個方向發展,也不想在這家公司晉升,所以不想花太多力氣處理目前的工作。但其實努力晉級,和你想不想在這個工作領域發展,一點關係都沒有。想得到更多的機會,就必須站上更進一級的臺階,才看得到機會浮現。未來的發展機會,和臺階的高度有關,和是否有興趣無關。將來有一日,你會有機會往興趣發展,但現在你得先晉級才能把腳墊高,不然什麼機會都看不到。

資料來源:https://www.cheers.com.tw/article/article.action?id=5102057
#4
[管理] 菜鳥—資深職人—高階主管:職涯三階段的穿衣哲學

這可能是你最該在意服裝的場域,因為沒有人不希望在職場有好連結。在工作上,做人永遠比做事來得重要。職場是最需要贏得他人好感度的地方,如果衣服可以讓你的職場關係如順水推舟,又何必逆水行舟呢?

資料來源:https://www.cheers.com.tw/article/article.action?id=5102059
#5
Linux相關 / 如何有效的學習Linux
Last post by gandalf - 十一月 09, 2024, 10:24 PM
學習 Linux 是一個逐步深入的過程,既有理論的學習,也有實踐的操作。要有效地學習 Linux,你可以遵循以下幾個步驟:

1. 理解 Linux 基本概念
在開始動手之前,首先需要了解一些基本概念:
  • Linux 是什麼:了解 Linux 的歷史、發展、以及它與其他操作系統(如 Windows、macOS)之間的差異。
  • Linux 發行版:了解不同的 Linux 發行版(如 Ubuntu、CentOS、Debian、Arch Linux)之間的差異,選擇一個適合初學者的發行版(例如 Ubuntu)。
  • 命令行基礎:Linux 主要是通過命令行進行操作,學會一些基本命令(如 ls、cd、mkdir 等)是非常重要的。

2. 安裝 Linux
  • 安裝虛擬機或雙重啟動:對於初學者,使用虛擬機(如 VirtualBox 或 VMware)來安裝 Linux 會很方便,這樣可以在不改變現有操作系統的情況下進行實驗。另一種選擇是使用雙重啟動,即在同一台電腦上同時安裝 Linux 和其他操作系統(如 Windows)。
  • 選擇合適的發行版:如前所述,Ubuntu 是初學者的理想選擇,因為它有強大的社群支持,並且適合大多數硬體配置。

3. 學習基本命令
學會基本的命令行操作是學習 Linux 的核心部分。以下是一些必須掌握的命令:

  • 文件操作:ls(列出文件)、cd(切換目錄)、cp(複製文件)、mv(移動/重命名文件)、rm(刪除文件)。
  • 檔案權限:chmod(改變權限)、chown(改變擁有者)。
  • 文件編輯:學習使用基本的命令行編輯器,如 vi 或 nano。
  • 查找命令:find(查找文件)、grep(搜索文件內容)、locate(快速查找)。
  • 系統管理:ps(查看進程)、top(查看系統資源使用狀況)、df(查看磁碟使用情況)、free(查看記憶體狀況)。

4. 學會使用手冊(man)
man 命令可以查詢命令的詳細使用方法,是學習 Linux 的重要工具。例如:

man ls這將顯示 ls 命令的手冊頁,讓你了解其用法和參數。

5. 了解檔案系統結構
理解 Linux 的檔案系統結構非常重要,這樣你能更好地管理文件和資料夾。Linux 文件系統遵循樹狀結構,根目錄是 /,其他目錄如 /home(用戶文件)、/etc(系統配置文件)、/var(變動數據)等。

6. 深入學習 Shell 和腳本
  • Shell 基礎:Linux 使用 Shell(如 Bash)來處理命令,學會基本的 Shell 語法和操作非常重要。學習如何使用管道 (|)、重定向 (> 和 <)、以及命令替換等功能。
  • 寫腳本:學會編寫簡單的 Shell 腳本,這能大大提高你的效率,讓你能自動化許多日常任務。腳本可以用來批量處理文件、定時執行任務、管理系統等。

7. 學習系統管理
系統管理是 Linux 使用者的一個重要領域,涵蓋了許多方面:

  • 用戶與權限管理:了解如何添加/刪除用戶,設置用戶權限和群組,使用 sudo 提升權限等。
  • 軟體安裝與管理:學習如何使用包管理器(如 apt、yum、dnf)來安裝和管理軟體包。
  • 日誌管理:學習如何查看和解讀系統日誌(位於 /var/log/ 目錄),這對於故障排除至關重要。
  • 服務和守護進程:學習如何管理系統服務和守護進程,並使用工具如 systemctl 來啟動、停止和重啟服務。

8. 練習與實踐
  • 搭建實驗環境:通過設置一個 Linux 伺服器(例如 Web 伺服器、資料庫伺服器、FTP 伺服器等)來實踐所學的知識。
  • 參加 Linux 社群:加入論壇、社群、線上討論區(如 Stack Overflow、Reddit、Linux Questions 等),這不僅能幫助你解決問題,還能與其他學習者交流經驗。

9. 學習進階概念
當你對基本操作有了一定的了解後,可以進一步學習一些進階的概念:

  • 內核配置與編譯:了解如何編譯和配置 Linux 內核,並學會自定義內核。
  • 網絡與安全:學習如何配置防火牆(如 iptables 或 firewalld),設置 SSH 服務器進行遠程登錄,學習 Linux 的安全機制(如 SELinux)。
  • 虛擬化與容器化:了解如何使用 Docker、KVM 或 VirtualBox 進行虛擬化和容器化管理。

10. 持續學習和保持實踐
  • 定期實踐:Linux 是一個非常靈活的操作系統,不同的操作和工具可能需要在多次實踐中才會真正掌握。
  • 閱讀書籍和文檔:閱讀一些經典的 Linux 書籍,比如《Linux 系統管理手冊》和《鳥哥的 Linux 私房菜》。
  • 挑戰自己:定期參加一些 Linux 的挑戰或任務,例如搭建 LAMP 堆疊、構建一個家庭伺服器或學習自動化腳本等。

總之,學習 Linux 最好的方法就是不斷地實踐和動手操作,並結合一些系統性的學習資源來加深理解。隨著時間的推移,你會對 Linux 系統的運作和管理變得更加熟練。
#6
Linux相關 / Linux是一個什麼樣的存在呢?
Last post by gandalf - 十一月 09, 2024, 12:34 PM
Linux 是什麼?
Linux 是一種開放源代碼的操作系統,它的核心(Kernel)是由芬蘭的程序員 Linus Torvalds 於 1991 年開發並首次公開發佈的。自那時以來,Linux 經歷了快速發展,成為全球範圍內最受歡迎的操作系統之一,尤其在伺服器、嵌入式系統、開發領域和超級計算機中佔據了主導地位。

1. 開放源代碼(Open Source)
Linux 是一個開源軟體,這意味著它的源代碼可以公開查看、修改和分發。這不僅促進了全球開發者的合作,也促使了大量基於 Linux 的定制版本(如 Ubuntu、CentOS、Debian 等)的誕生。開源的特性讓 Linux 能夠被廣泛應用並根據需求進行修改,這對開發者、企業和研究機構來說具有很大的吸引力。

2. Linux 核心(Kernel)
Linux 操作系統的核心叫做 Linux Kernel,它負責管理硬體資源和軟體之間的交互。Kernel 是整個 Linux 系統的核心,負責處理各種硬體操作(如 CPU、記憶體、磁碟存儲、網路設備等)並向上層的應用程式提供服務。除了 Linux Kernel 外,還有大量的應用程式、工具和庫來支援使用者和開發者的需求。

3. Linux 的發行版(Distributions)
  • Linux 不是單一的操作系統,而是由多個不同版本(發行版)組成,每個發行版都有不同的預設設定和特性,並可能針對特定的用途或用戶需求進行優化。常見的 Linux 發行版包括:
  • Ubuntu:適合新手使用的發行版,界面友好,並且有大量的社群支持。
  • CentOS:基於 Red Hat Enterprise Linux(RHEL)的免費版本,適合企業伺服器使用。
  • Debian:穩定且廣泛使用的發行版,是許多其他發行版(如 Ubuntu)的基礎。
  • Arch Linux:面向有經驗的用戶,提供滾動更新和高度自定義的環境。
  • Fedora:由 Red Hat 支持的社群發行版,提供最新的技術和軟體。

4. 使用 Linux 的好處
免費和開源:Linux 是免費的,並且可以自由使用、修改和分發。
穩定性和安全性:Linux 以其高穩定性和安全性著稱,尤其是在伺服器環境中,許多 Web 伺服器和雲端平台都運行 Linux。
靈活性和可定制性:使用者可以根據自己的需求修改 Linux 系統的各個部分,這使得 Linux 特別適合需要高定制性和特定功能的場合。
支援多種硬體架構:Linux 支援從個人電腦到嵌入式系統、從 Raspberry Pi 到超級計算機的各種硬體。
廣泛的社群支持:由於開源,Linux 擁有龐大的開發者社群,使用者可以輕鬆獲得技術支持、教程和軟體包。

5. Linux 的用途
伺服器:Linux 是全球最常見的伺服器操作系統,許多 Web 伺服器、郵件伺服器、數據庫伺服器等都使用 Linux。它的穩定性和可擴展性使其成為企業級應用的首選。
嵌入式系統:Linux 被廣泛應用於嵌入式領域,從家電、汽車到路由器、機器人等,許多嵌入式設備都基於 Linux。
開發環境:許多開發者選擇 Linux 作為開發環境,特別是那些需要使用開放源代碼工具(如 Git、Docker、Python 等)的開發者。
超級計算機:Linux 是全球超級計算機中最常見的操作系統,它的可定制性和對高性能計算的支援,使其在科學研究和數據處理方面得到廣泛應用。
桌面操作系統:雖然 Windows 和 macOS 在桌面領域佔有主導地位,但 Linux 在開發者、技術專業人員和愛好者中擁有穩定的用戶群體。桌面發行版如 Ubuntu、Fedora 等提供了友好的圖形界面和強大的功能。

6. Linux 與其他操作系統的區別
免費與開源:不同於商業操作系統(如 Windows 和 macOS),Linux 是免費且開源的,這意味著用戶可以對系統進行深入的修改。
命令行與圖形界面:Linux 通常更依賴命令行操作,這對於進階用戶和開發者來說非常靈活和高效。雖然現代 Linux 發行版也提供了圖形用戶界面(GUI),但命令行依然是許多高效操作的首選方式。
穩定性與安全性:Linux 系統被認為比其他商業操作系統更穩定和安全,這使它在伺服器和嵌入式領域廣泛應用。

結論
Linux 是一個強大、靈活且開放的操作系統,廣泛應用於伺服器、嵌入式系統、開發環境以及超級計算機領域。由於其開源特性和強大的社群支持,Linux 成為了技術愛好者和專業開發者的首選平台。它的多樣性和可定制性使得各種規模的應用場景都能夠受益於 Linux 系統的穩定性與效率。 ;D
#7
Linux相關 / 林納斯·托瓦茲 (Linus Torvalds)
Last post by gandalf - 十一月 09, 2024, 11:30 AM
Linux的前世今生
 
提及 Linux 的誕生之前,不得不提到由Richard Matthew Stallman所領導的 GNU專案計劃。該專案於1983年9月推出,是一個自由軟體集體協作計劃,又稱為自由軟體運動。
 
GNU全名是GNU is Not Unix,主要目的是要讓人可以自由地「使用、複製、修改和釋出」軟體,其主要的發展方向有二個,一是發展Unix程式標準介面,進行應用程式的開發,另一個則是開發自由的作業系統。為了保障自由軟體禁止其他人添加任何限制的情況下,授權所有權利給任何人,進而催生了知名 GNU通用公眾授權條款(GNU General Public License,GPL)。

 

其中知名的軟體,包括GCC、GDB、GNU Emacs則是給後來的Linux作業系統,打下良好的催生環境與條件。

時間到了1991年,一名芬蘭大學生Linus Torvalds出於自身愛好,利用GNU的GCC、GNU Emacs 等工具,在他的80386電腦上,創作了一套類UNIX (UNIX-like)系統的作業系統核心並且在GPL下釋出,人稱 Linux(意即 Linus'Unix)。由於在這套類UNIX系統可在當時x86架構的PC上使用,再配合一系列GNU所建構的好用軟體,所以非常迅速的在網路上流傳開來。

隨著時代的演進,Linux 作業系統也在全球工程師的努力貢獻之下,也與時俱進,跟著電腦硬體的進步而進步,並且在資訊的領域內開枝展葉,在許多的領域中成為出色的作業系統,小至手機、嵌入式系統,大至研究等級的超級電腦,都有非常大量的佔有率。
#8
https://www.flag.com.tw/flag/download

Flag's 創客‧自造者工作坊 AI 生醫感測健康大應用 簡易心電圖機程式說明

#include <NNforduino.h>

int _E5_8E_9F_E5_A7_8B_E5_80_BC;
double _E6_BF_BE_E6_B3_A2ECG;
NNforduino _E7_A5_9E_E7_B6_933;

// setup() 會先被執行且只會執行一次
void setup() {
  Serial.begin(9600);
  pinMode(A0, INPUT);

  _E7_A5_9E_E7_B6_933.RNN(0.6);

}

// loop() 裡面的程式會不斷重複執行
void loop() {
  _E5_8E_9F_E5_A7_8B_E5_80_BC = analogRead(A0);
  _E6_BF_BE_E6_B3_A2ECG = _E7_A5_9E_E7_B6_933.OutRNN(_E5_8E_9F_E5_A7_8B_E5_80_BC);
  Serial.println((String(_E5_8E_9F_E5_A7_8B_E5_80_BC + 500) + String(u8",") + String(_E6_BF_BE_E6_B3_A2ECG)));

}

這段程式碼是用於 Arduino 的程式,並且使用了一個名為 NNforduino 的庫來進行某些神經網絡相關的操作。讓我們逐行解釋這段程式碼:

 1. #include <NNforduino.h>

這行程式碼是引入了一個外部庫 NNforduino,它應該提供了與神經網絡相關的功能。從程式碼的上下文來看,這個庫可能是用來處理一些基於神經網絡的運算,像是回歸、分類等。

 2. 變數宣告


int _E5_8E_9F_E5_A7_8B_E5_80_BC;
double _E6_BF_BE_E6_B3_A2ECG;
NNforduino _E7_A5_9E_E7_B6_933;


- _E5_8E_9F_E5_A7_8B_E5_80_BC 是一個整數型別變數,名稱看起來像是 Unicode 編碼,可能是某種編碼過的命名方式,或者只是使用了 Unicode 字符進行命名。這個變數後來會存儲來自類比輸入的數值。
- _E6_BF_BE_E6_B3_A2ECG 是一個 double 型別變數,這裡用來儲存經過神經網絡處理後的數值,可能是一些預測結果。
- _E7_A5_9E_E7_B6_933 是一個 NNforduino 類型的物件,這個類別可能是用來創建和操作神經網絡的物件,並提供各種方法來執行預測等。

 3. setup() 函數


void setup() {
  Serial.begin(9600);
  pinMode(A0, INPUT);

  _E7_A5_9E_E7_B6_933.RNN(0.6);
}


- Serial.begin(9600) 設定串口通信的波特率為 9600,這樣 Arduino 可以通過串口與電腦或其他設備進行資料交換。
- pinMode(A0, INPUT) 將 Arduino 上的 A0 腳位設為輸入模式。這表示將會從 A0 腳位讀取類比信號(比如來自感測器的數據)。
- _E7_A5_9E_E7_B6_933.RNN(0.6) 這行代碼調用了 NNforduino 類別的 RNN() 方法,並傳遞了一個參數 0.6。這應該是在初始化神經網絡模型時設置某些參數(例如學習速率、誤差容忍度等)。

 4. loop() 函數


void loop() {
  _E5_8E_9F_E5_A7_8B_E5_80_BC = analogRead(A0);
  _E6_BF_BE_E6_B3_A2ECG = _E7_A5_9E_E7_B6_933.OutRNN(_E5_8E_9F_E5_A7_8B_E5_80_BC);
  Serial.println((String(_E5_8E_9F_E5_A7_8B_E5_80_BC + 500) + String(u8",") + String(_E6_BF_BE_E6_B3_A2ECG)));
}


- _E5_8E_9F_E5_A7_8B_E5_80_BC = analogRead(A0); 這行從 A0 腳位讀取一個類比值,並將該值儲存在變數 _E5_8E_9F_E5_A7_8B_E5_80_BC 中。analogRead() 會讀取一個 0 到 1023 之間的數值,表示 10 位的類比數據(0-5V)。
 
- _E6_BF_BE_E6_B3_A2ECG = _E7_A5_9E_E7_B6_933.OutRNN(_E5_8E_9F_E5_A7_8B_E5_80_BC); 這行將剛才讀取到的類比數值傳遞給 _E7_A5_9E_E7_B6_933 物件的 OutRNN() 方法。這個方法應該會使用神經網絡模型來處理這些輸入數據,並返回一個預測結果或處理後的數值,結果會儲存在 _E6_BF_BE_E6_B3_A2ECG 中。

- Serial.println((String(_E5_8E_9F_E5_A7_8B_E5_80_BC + 500) + String(u8",") + String(_E6_BF_BE_E6_B3_A2ECG))); 這行程式碼將輸出兩個數值到串口:
  - 首先是 _E5_8E_9F_E5_A7_8B_E5_80_BC + 500,這個數值加了 500,然後轉換成字串。
  - 其次是 _E6_BF_BE_E6_B3_A2ECG,這是神經網絡處理後的數值,也轉換為字串。
  - 兩者之間用逗號(,)分隔,並通過 Serial.println() 輸出到串口,這樣可以在 Arduino IDE 的序列監視器中查看數據。

 小結

這段程式碼的目的是從 Arduino 的 A0 腳位讀取一個類比信號,然後使用神經網絡對這些數據進行處理,並將處理後的結果輸出到串口。它涉及的核心部分是 NNforduino 類別,這個類別負責神經網絡的初始化(RNN() 方法)和對輸入數據的處理(OutRNN() 方法)。
#9
Arduino相關 / ESP01s 智慧插座專案
Last post by gandalf - 十一月 06, 2024, 12:31 AM
ESP01s 智慧插座專案,請依照上課講師步驟執行唷

  • 這段程式使用ESP8266搭建一個簡單的Web伺服器,並且控制LED的開關。
  • 用戶透過瀏覽器訪問ESP8266提供的Wi-Fi熱點,並可透過網頁控制LED的開關。
  • 程式中定義了四個主要路由:根路由(/),開啟LED的路由(/ledon),關閉LED的路由(/ledoff),以及未找到頁面的處理(/notfound)。
  • 當用戶點擊網頁上的"ON"或"OFF"按鈕時,會發送HTTP請求來控制LED的開關,並且更新網頁顯示的狀態。

#include <ESP8266WiFi.h>             // 引入ESP8266 WiFi庫
#include <ESP8266WebServer.h>         // 引入ESP8266 Web Server庫

/* Put your SSID & Password */
const char* ssid = "cda1031";       // 設定Wi-Fi名稱 (SSID)
const char* password = "123456789"; // 設定Wi-Fi密碼

ESP8266WebServer server(80);         // 建立一個Web Server物件,使用端口80

bool LEDstatus = LOW;               // 定義LED的狀態,初始為LOW (關閉)

void setup() {
  Serial.begin(9600);                // 啟動Serial監控,設定波特率為9600
  pinMode(0, OUTPUT);                // 設定D0腳位為輸出模式
  pinMode(2, OUTPUT);                // 設定D2腳位為輸出模式
  digitalWrite(2, LOW);              // 設定D2腳位初始狀態為LOW (關閉)
  WiFi.softAP(ssid, password);       // 啟動ESP8266作為Access Point,並設定SSID和密碼

  IPAddress myIP = WiFi.softAPIP(); // 取得ESP8266的IP地址
  Serial.print("Access Point IP:");  // 顯示 "Access Point IP:"
  Serial.println(myIP);              // 顯示ESP8266的IP地址
 
  // 設定Web伺服器的處理路由,當路由被訪問時呼叫對應的處理函數
  server.on("/", handle_OnConnect);     // 根路由 ("/") 呼叫 handle_OnConnect 函數
  server.on("/ledon", handle_ledon);    // 訪問 "/ledon" 呼叫 handle_ledon 函數
  server.on("/ledoff", handle_ledoff);  // 訪問 "/ledoff" 呼叫 handle_ledoff 函數
  server.onNotFound(handle_NotFound);   // 訪問其他未定義的路由,呼叫 handle_NotFound 函數
 
  server.begin();                      // 啟動Web伺服器
  //Serial.println("HTTP Server Started"); // 可選,顯示伺服器已啟動
}

void loop() {
  server.handleClient();               // 處理來自客戶端的請求
 
  // 根據LEDstatus變數,控制D0腳位的電平 (開/關LED)
  if(LEDstatus)
  {
    digitalWrite(0, HIGH);             // 如果LEDstatus為HIGH,則設置D0腳位為HIGH (開啟LED)
  }
  else
  {
    digitalWrite(0, LOW);              // 如果LEDstatus為LOW,則設置D0腳位為LOW (關閉LED)
  }
}

// 根路由 ("/") 的處理函數
void handle_OnConnect() {
  LEDstatus = LOW;                    // 設置LED為關閉狀態
  Serial.println("LED: OFF");          // 輸出 "LED: OFF" 到Serial監控
  server.send(200, "text/html", updateWebpage(LEDstatus)); // 回應HTTP請求,傳送HTML頁面
}

// 訪問"/ledon"的處理函數
void handle_ledon() {
  LEDstatus = HIGH;                   // 設置LED為開啟狀態
  Serial.println("LED: ON");           // 輸出 "LED: ON" 到Serial監控
  server.send(200, "text/html", updateWebpage(LEDstatus)); // 回應HTTP請求,傳送更新的HTML頁面
}

// 訪問"/ledoff"的處理函數
void handle_ledoff() {
  LEDstatus = LOW;                    // 設置LED為關閉狀態
  Serial.println("LED: OFF");          // 輸出 "LED: OFF" 到Serial監控
  server.send(200, "text/html", updateWebpage(LEDstatus)); // 回應HTTP請求,傳送更新的HTML頁面
}

// 處理未定義的路由,顯示 404 頁面
void handle_NotFound(){
  server.send(404, "text/plain", "Not found");  // 回應HTTP請求,傳送 404 Not Found
}

// 更新HTML頁面的內容,根據LED狀態顯示不同的內容
String updateWebpage(uint8_t LEDstatus){
  String ptr = "<!DOCTYPE html> <html>\n";  // 開始編寫HTML頁面
  ptr += "<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";  // 設置視窗縮放屬性
  ptr += "<title>LED Control</title>\n";     // 設置頁面標題
  ptr += "<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";  // CSS樣式設置
  ptr += "body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;} h3 {color: #444444;margin-bottom: 50px;}\n";
  ptr += ".button {display: block;width: 80px;background-color: #1abc9c;border: none;color: white;padding: 13px 30px;text-decoration: none;font-size: 25px;margin: 0px auto 35px;cursor: pointer;border-radius: 4px;}\n";
  ptr += ".button-on {background-color: #3498db;}\n";
  ptr += ".button-on:active {background-color: #3498db;}\n";
  ptr += ".button-off {background-color: #34495e;}\n";
  ptr += ".button-off:active {background-color: #2c3e50;}\n";
  ptr += "p {font-size: 14px;color: #888;margin-bottom: 10px;}\n";
  ptr += "</style>\n";  // 結束CSS樣式
  ptr += "</head>\n";   // 結束HTML的頭部
  ptr += "<body>\n";    // 開始HTML的主體部分
  ptr += "<h1>Smart Switch Project</h1>\n";  // 頁面標題顯示
  ptr += "<h3>2024 DV107 @ 202</h3>\n";  // 顯示小標題
  ptr += "<h3>smf.ntc.im</h3>\n";  // 顯示網站名
 
  // 根據LED的狀態,顯示不同的按鈕和信息
  if(LEDstatus){
    ptr += "<p>Power: ON</p><a class=\"button button-off\" href=\"/ledoff\">OFF</a>\n";  // LED開啟時,顯示"Power: ON"和"OFF"按鈕
  } else {
    ptr += "<p>Power: OFF</p><a class=\"button button-on\" href=\"/ledon\">ON</a>\n";  // LED關閉時,顯示"Power: OFF"和"ON"按鈕
  }

  ptr += "</body>\n";  // 結束HTML主體
  ptr += "</html>\n";  // 結束HTML頁面
  return ptr;         // 返回生成的HTML頁面
}

#10
Arduino相關 / 重灌舊版的Driver有時是問題的解方
Last post by gandalf - 十一月 06, 2024, 12:19 AM
當你於Audrion IDE進行程式碼燒錄時看到類似以下的錯誤時,有很高的概率是 CH340 Driver 有問題,此時重灌舊版本的Driver就可以解決,譬如:2014/8/8的版本。


引用. Variables and constants in RAM (global, static), used 28104 / 80192 bytes (35%)
║   SEGMENT  BYTES    DESCRIPTION
╠══ DATA     1496     initialized variables
╠══ RODATA   920      constants       
╚══ BSS      25688    zeroed variables
. Instruction RAM (IRAM_ATTR, ICACHE_RAM_ATTR), used 59667 / 65536 bytes (91%)
║   SEGMENT  BYTES    DESCRIPTION
╠══ ICACHE   32768    reserved space for flash instruction cache
╚══ IRAM     26899    code in IRAM   
. Code in flash (default, ICACHE_FLASH_ATTR), used 232148 / 1048576 bytes (22%)
║   SEGMENT  BYTES    DESCRIPTION
╚══ IROM     232148   code in flash   

A fatal esptool.py error occurred: Cannot configure port, something went wrong. Original message: PermissionError(13, '�s����t�Ϊ��Y�Ӹ˸m���h�@�ΡC', None, 31)esptool.py v3.0
Serial port COM6