按鍵控制LED實驗電路(二)

按鍵控制 LED 電路原理圖

電路說明:

    1. R2 為限流電阻。一般的 LED 最大能承受的電流為 25 mA,若直接將 LED 連接到電路中,則當點亮 LED 時很容易將其燒毀。
    2. R1 為下拉電阻。在 Arduino 開發板的 2 號引腳到 GND 之前,連接了一個阻值很大的電阻 ( 10KΩ )。如果沒有該電阻,則未按下按鍵時,2 號引腳會一直處於“懸空” 狀態,此時使用 digitalRead( ) 函數讀取 2 號引腳的狀態會得到一個不穩定的值 ( 可能是高,也可能是低 )。添加這個 R1 電阻到 GND 就是為了穩定引腳的電位。當該引腳懸空時,就會被識別為低電位。而這種將某節點通過電阻接地的做法稱為下拉,這個電阻就稱為下拉電阻。

程式碼

int buttonPin = 2;    // 連接按鍵的引腳
int ledPin = 13;        // 連接 LED 的引腳
int buttonState = 0; // 儲存按鍵狀態的變數

void setup() {
  // 初始化按鍵引腳為輸入狀態
  pinMode(buttonPin,INPUT);
 // 初始化 LED 引腳為輸入狀態
  pinMode(ledPin,OUTPUT);
}

void loop() {
  // 讀取按鍵狀態並儲存在變數中
  buttonState = digitalRead(buttonPin);
  // 檢查按鍵是否被按下
  // 如果按鍵被按下,則 buttonState 應該為高電位
  if(buttonState==HIGH)
  {
    // 點亮 LED
    digitalWrite(ledPin,HIGH);
  }
  else
  {
    // 熄滅 LED
    digitalWrite(ledPin,LOW);
  }
}

實驗結果

按鍵控制LED實驗電路(一)

按鍵控制 LED 電路原理圖

程式碼

// 定義按鍵輸入引腳、LED 輸出引腳及按鍵狀態
int buttonPin = 2;
int ledPin = 13;
int buttonState = 0;

void setup() {
  // 初始化按鍵引腳為輸入狀態
  pinMode(buttonPin,INPUT_PULLUP);
  // 初始化 LED 引腳為輸出狀態
  pinMode(ledPin,OUTPUT);
}

void loop() {
  // 讀取按鍵狀態並存入 buttonState 變數中
  buttonState = digitalRead(buttonPin);
  // 檢查按鍵是否被按下
  // 如果按鍵被按下 , 則 buttonState 應為低電位
  if(buttonState==LOW)
  {
    // 熄滅 LED 
    digitalWrite(ledPin,LOW);
  }
  else
  {
    // 點亮 LED
    digitalWrite(ledPin,HIGH);
  }
}

實驗結果

流水燈實驗電路

流水燈電路原理圖

程式碼

void setup() {
  // 初始化 I/O 口
  for (int i=8;i<13;i++)
      pinMode(i,OUTPUT);
}

void loop() {
  // 從引腳 8 到引腳 12, 逐個點亮 LED, 等待 1 秒再熄滅 LED
  for (int i=8;i<13;i++)
  {
    digitalWrite(i,HIGH);
    delay(1000);
    digitalWrite(i,LOW);
  }
  // 從引腳 12 到引腳 8, 逐個點亮 LED, 等待 1 秒再熄滅 LED
  for (int i=12;i>7;i--)
  {
    digitalWrite(i,HIGH);
    delay(1000);
    digitalWrite(i,LOW);
  }
}

實驗結果

相關函數說明

pinMode ( pin , mode )

參數 pin 為指定配置的引腳編號,參數 mode 為指定配置模式,可使用的的三種模式如下:

    1. INPUT : 輸入模式。
    2. OUTPUT : 輸出模式。
    3. INPUT_PULLUP : 輸入上拉模式。

配置為輸出模式以後,還需要使用 digitalWrite( ) 函數使該引腳輸出高電位或低電位。

delay ( value )

為毫秒延時函數,delay ( 1000 ) 為延時 1 秒 ( 1000 毫秒 )。

digitalWrite ( pin , value )

其中參數 pin 為指定輸出的引腳編號。參數 value 為要指定的輸出電位,使用 HIGH 指定輸出高電位,使用 LOW 指定輸出為低電位。

Arduino 中輸出的低電位為 0 V,輸出的高電位為當前 Arduino 的工作電壓,一般為 5 V。

架設 FTP 伺服器

Linux 與 UNIX 系統常見的 FTP 伺服器為「vsftpd ( Very Secure FTPD )」。其功能特色:

  • 支援虛擬主機。
  • 可使用虛擬帳號 ( 使用者 )。
  • 支援 Linux 獨立服務與 inetd 總管服務。
  • 帳號個別設定。
  • 頻寬調節。
  • 支援 ipv6。
  • 支援 SSL 加密連線。

安裝必要套件

以 yum 來安裝 vsftpd 。安裝指令如下:

yum -y install vsftpd

設定防火牆

利用防火牆設定指令「firewall-cmd」加入允許 ftp 服務,並使用「–permanent」寫入設定檔,使其永久有效:

firewall-cmd --permanent --add-service=ftp
firewall-cmd --reload

啟動 vsftpd 服務及設定開機自動啟動:

systemctl start vsftpd
systemctl enable vsftpd

架設安裝 postfix 與 dovecot

安裝必要套件

  • postfix – postfix 伺服器的主要套件,提供電子郵件的傳送功能。
  • dovecot – 負責 POP3、IMAP 等提供使用者取信的通訊協定伺服器。

安裝相關套件指令如下:

yum -y install postfix dovecot

設定防火牆

利用防火牆設定指令「firewall-cmd」加入允許 stmp、pop3 與 imap 服務,並使用「–permanent」寫入設定檔,使其永久有效,接著啟動 postfix 服務與設定開機自動啟動服務,操作指令如下:

firewall-cmd --permanent --add-service=smtp
firewall-cmd --permanent --add-port=110/tcp
firewall-cmd --permanent --add-port=143/tcp
firewall-cmd --reload
systemctl start postfix
systemctl enable postfix

設定 postfix

postfix 所有設定值位於 /etc/postfix/main.cf 檔案中。修改該檔案中的部份設定值:

#myhostname = host.domain.tld
#myhostname = virtual.domain.tld
myhostname = ms.x-family.com.tw
#mydomain = domain.tld
mydomain = x-family.com.tw
#myorigin = $myhostname
#myorigin = $mydomain
myorigin = $myhostname
inet_interfaces = all
#inet_interfaces = $myhostname
#inet_interfaces = $myhostname, localhost
#inet_interfaces = localhost
# Enable IPv4, and IPv6 if supported
inet_protocols = all
#mydestination = $myhostname, localhost.$mydomain, localhost
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
#	mail.$mydomain, www.$mydomain, ftp.$mydomain
mydestination = $myhostname, localhost.$mydomain, localhost,ms.x-family.asia,ms.x-family.com.cn,ms.x-family.idv.tw
#mynetworks_style = host
mynetworks_style = subnet
#mynetworks_style = host
mynetworks_style = subnet

SMTP 帳號密碼認証

Cyrus-SASL 是一套專門的認證函式庫,可以提供 postfix 做為認證時呼叫其代為認證帳號密碼是否符合。在 CentOS 的套件名稱是「cyrus-sasl」,可以使用 yum 指令進行安裝,並利用 systemctl 進行服務啟動:

yum -y install cyrus-sasl
systemctl start saslauthd
systemctl enable saslauthd

最後,修改 postfix 設定檔 /etc/postfix/main.cf,在檔案的最尾端加入以下設定值:

smtpd_sasl_auth_enable=yes
smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination

修改 Dovecot 設定檔

Dovecot 伺服器的設定檔為 /etc/dovecot/dovecot.conf ,修改檔案中的設定內容如下:

# Protocols we want to be serving.
#protocols = imap pop3 lmtp
protocols = imap pop3
#listen = *, ::
listen = *

並在該設定檔的最尾端,加入一行設定值如下:

# A config file can also tried to be included without giving an error if
# it's not found:
!include_try local.conf

mail_location=mbox:~/mail:INBOX=/var/mail/%u

接著修改 /etc/dovecot/conf.d/10-auth.conf 的設定內容,如下所示:

#disable_plaintext_auth = yes
disable_plaintext_auth = no

最後,修改 /etc/dovecot/conf.d/10-ssl.conf 的設定內容,如下所示:

#ssl = required
ssl = no

儲存設定檔後,啟動 dovecot 服務及設定開機時自動啟動服務。此外,為了避免權限問題,將 /var/mail/ 底下檔案權限設為 600,指令如下:

systemctl start dovecot
systemctl enable dovecot
chmod 600 /var/mail/*

安裝 Apache

初次接觸 Linux 時,常因為對 SELinux 的不熟悉而造成架設伺服器時出現無法連線的狀況。因此,先將 SELinux 關閉,以 root 角色開啟 /etc/sysconfig/selinux 設定檔,修改內容,將 SELINUX 設定 disable,如下所示:

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
#SELINUX=enforcing
SELINUX=disable
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

安裝必要套件

Apache 伺服器在 CentOS 中的套件名稱是 httpd,主機應安裝以下兩個套件:

  • hpptd : 伺服器主要套件,提供主要設定檔、模組、執行檔等。
  • httpd-tools :權限驗證功能的帳號密碼工具。

安裝指令如下:

yum -y install httpd httpd-tools

利用 systemctl 指令啟動 httpd 服務及開機自動啟動服務:

systemctl start httpd.service
systemctl enable httpd.service

由於 CentOS 安裝完成後,預設是開啟防火牆功能,且只允許 SSH 連線 (TCP,port 22) 進入主機,故以下面的指令來讓外部電腦使用瀏覽器連入主機,並關閉 SELinux 中有關使用者家目錄網頁伺服器的存取限制:

firewall-cmd --add-service=http --permanent
firewall-cmd --reload
setsebool -P httpd_enable_homedirs=1

讓 Apache 支援 php

Apache 要能有執行 PHP 的功能,需另外安裝 php 套件。指令如下:

yum -y install php