物聯網應用系統 (六)

Page 1

物聯網系統整合應用 (六) IOT (Internet Of Things)


課程主題 (Part 6)  Web Server 相關介紹  BeagleBone 硬體介紹  BeagleBone 軟體介紹  

作業系統 - Linux 程式語言 - Python

 BeagleBone之WebServer程式說明


網際網路 (World of Internet)


網路伺服器分類(Internet Server)  依據伺服器提供的服務來分... ※ WebServer 網頁伺服器 ※ Email Server 郵器伺服器 ※ FTP Server 檔案共享伺服器 ※ DNS Server 網址轉換伺服器 ※ Home Server (入口網站)


網路伺服器架構

192.168.1.111


網頁伺服器的輸出阜定義 Official TCP/IP Ports Definition http://www.chebucto.ns.ca/~rakerman/port-table.html#Table

 Change Web-port No. "80" to "8000" in BeagleBone.


WebServer 硬體

BeagleBone 硬體開發板 BeagleBone™為本系統的 WebServer 模組,採用 TEXAS INSTRUMENTS 的 AM3358 cortex-A8 為核心,透過 Linux 核心,可簡化在 BeagleBone 上各類感測器和控制的開發 工作,它提供內建乙太網 MAC、 支援 PHY 。


硬體規格 On beaglebone: Peripherial chips are added to make the board more handy to use.

a) 256MB DDR2 @ 400MHz b) USB hub

c) Ethernet phy d) Micro SD slot

e) 2 ports 46 pins expansions header (2.54): a) b) c) d) e) f) g) h) i) j) •

LCD GPMC bus(memory controller) MMC1 (MMC card) SPI x2 IIC x3 UART x6 ADC(1.8V max) GPIO x 66 CAN Bus x2 Timer output x4 PWM x 8

All IO are 3.3V except ADC is 1.8V


BeagleBone 方塊圖


AM3358 CPU 內部方塊圖


BeagleBone I/O 介面分類 1. LCD Interface - 24 bits LCD 介面 2. GPMC (General Purpose Memory Controller) - TI 專 屬的外接記憶體控制介面 3. MMCI - MMC 記憶卡控制介面 4. Uart (6組) - 非同步信號介面 5. I2C (3組) - 非同步信號介面 6. SPI (Serial Periphal Interface) (2組) - 同步信號介面


多功能輸出入阜(Muxing GPIO)

共 2Ports / 46Pins, 根據 Mode(0~7) 來選擇功能


若使用Python PyBBIO之程式庫 ...


常用的 Linux 指令 man "指令" (指令的使用 Manual) mkdir (建立一目錄) rmdir (移除一目錄) cd (改變目前錄位置) cat "file" 或 more "file" (觀看某一檔案內容) cp "file1", "file2" (複製檔案) rm "file" (刪除某一檔案) find "dir" -name "file" (在目錄中尋找某一檔案) grep "name" "file" (在檔案中尋找一串文字) chmod "xxx(755)" "file", xxx: 000 ~ 777 (u, g, o) (改變檔案屬性) ps -aux (觀看目前系統執行多少Process) kill "uid" (清除某一個 Process) vi "file" (使用Linux 的 vi 編輯器) useradd (建立帳號, 資料將存於 /etc/passwd 檔案中) passwd (改變user 之密碼) who (看誰在線上), Whoami (看個人帳號)


請同學安裝:

Juice SSH (Secure Shell) Client 以連接BeagleBone之Linux OS

1. 手機 Wifi 網路開啟 IOT_xxxx 2. 執行Juice SSH app 3. 設定Connection/New Connection ip address:192.168.1.111 4. 設定字體大小Settings/Fone Size


Script Language 的優點  Faster programming (快速)  Functions and library sharing (易分享)  Possibility of crossing platforms (跨平台)  Easy to use for Web application


Python Script 語法摘要 1. 程式邏輯以縮排當作段落 e.g.,

e.g.,

e.g.,

if number == 5 : print ( "Right numer) //縮排至少兩空格 else print ("Wrong number) while answer == "no" : answer = input ("your answer") print ("Right answer") for i in range (1,10) : print i

2. 導入程式庫用 import指令 (如同C 語言之 #include) e.g., import time time.sleep (900) #delay 0.9s


3. 函數使用定義: def func() e.g., def get_answer() : answer = input ("Your answer") print (answer)

4. 程式段落類似 Arduino 語法 - Python BBIO 程式庫 e.g., def setup() : # 執行一次的程式放此, 但setup名稱可以改變 def loop() : # 永久執行的程式放此, 但loop名稱可以改變

執行程式用指令: run (setup, loop)


使用Python直譯(Interpreter)環境 1. 登入 Linux - 手機或平板請使用 SSH 登入 [註] PC Window OS 則使用 Putty, 或 WinSCP

2. 進入 python 環境 (Python <cr> 或 !/usr/bin/env python <cr> )  螢幕將出現Python直譯環境之提示游標 ">>>"

3. 可直接當作計算器使用 e.g., 113+232, 23121-1212, 232*232

4. 或執行Python程式 e.g., for i in range (1,10): < 空2格以上 > print i <cr> 5. 離開 python環境, 執行 quit()


於Python直譯環境執行GPIO指令  from bbio import * // 使用PyBBIO 程式庫  pinMode(GPIO1_6, OUTPUT) // 連接P8第3腳至 任何一顆LED, 且LED 另一端接地  digitalWrite (GPIO1_6, HIGH) // GPIO 設為高電 壓  toggle (GPIO1_6) // GPIO 設定電壓反向


於Linux環境執行Python程式 - guess.py from random import randint secret = randint (1,10) guess = 0 while guess != secret : g = input ("Guess No") guess = int (g) if guess == secret : print ("you win ! ") else : print ("You loss !") print ("Game Over")

1. 若於SSH 環境使用Linux 指令: cat > guess.py 2. 離開編輯環境使用: <CRTL>+C, 存入 guess.py 3. 執行程式: python guess.py


Python 程式範例(blink.py) # blink.py # Blinks two of the Beagleboard's on-board LEDs until CTRL-C is pressed. # This example is in the public domain # Import PyBBIO library: from bbio import * # Create a setup function: 執行程式 : def setup(): python blink.py <cr> # Set the two LEDs as outputs: 以 <CTRL>C 離開 pinMode(USR2, OUTPUT) pinMode(USR3, OUTPUT) # Start one high and one low: digitalWrite(USR2, HIGH) digitalWrite(USR3, LOW) # Create a main function: def loop(): # Toggle the two LEDs and sleep a few seconds: toggle(USR2) toggle(USR3) delay(500) # Start the loop run(setup, loop)


BeagleBone網頁 程式架構圖

Initial Uart Initial Webserver

No

Press button Data from Arminno? Send command to Arminno

Display

執行指令

接收資料與顯 示


BeagleBone物 聯網首頁 透過有線或無線網路,使用 者可利用手機或PC 等裝置, 經由物聯網首頁,得知各感 知器的即時狀態 ,或透過網 頁去遠端遙控各種裝置。 IOT Server 使用說明


WebServer UI 控制指令 1. add Text # Create a new page home = Page("PyBBIO Test") # Add some text to the page: home.add_text ("This is a test of the BBIOServer library for PyBBIO. Follow the links at the left to test the different pages.")


3. add a Text Input # Create a new pag text = Page("Text Input") # Add one Text and one Text Input text.add_text ("Press submit to send the text in entry box:") text.add_entry (lambda text:print_entry(text), "Submit", newline=True)


Python 物聯網程式-1 (IOT_Server.py)

def setup(): # Start the serial port at 38400 baud: Serial2.begin(38400) Serial2.flush() # Create the web page: myServer = Page("IOT server") myServer.add_button(lambda: serial_get_color(), "Get Color", newline=True) myServer.add_button(lambda : serial_set_mp30(), "Music1", newline=True) myServer.add_button(lambda : serial_set_mp31(), "Music2", newline=False) myServer.add_button(lambda : serial_set_mp32(), "Music3", newline=False) myServer.add_button(lambda : serial_set_servo0(), "Servo Left", newline=True) myServer.add_button(lambda : serial_set_servo1(), "Servo Center", newline=False myServer.add_button(lambda : serial_set_servo2(), "Servo Right", newline=False) myServer.add_monitor(lambda: serial_rx(), "", newline=True) # Start the server: server.start(myServer) def loop(): # Server has stopped; exit happily: stop() run(setup, loop)


Python 物聯網程式-2 (IOT_Server.py) # serial_server.py # Creates a simple web interface to the Serial2 port. # Serial2 TX = pin 21 on P9 header # Serial2 RX = pin 22 on P9 header

from bbio import * from BBIOServer import * # Create a server object server = BBIOServer() # Define a global buffer for received data: data ='' def serial_get_color(): """ Sends given string to Serial2. """ Serial2.println("$c000") def serial_set_mp30(): """ Sends given string to Serial2. """ Serial2.println("$m000") def serial_set_mp31(): """ Sends given string to Serial2. """ Serial2.println("$m100") def serial_set_mp32(): """ Sends given string to Serial2. """ Serial2.println("$m200") def serial_set_servo0(): """ Sends given string to Serial2. """ Serial2.println("$v000")


Python 物聯網程式-3 (IOT_Server.py) def serial_set_servo1(): """ Sends given string to Serial2. """ Serial2.println("$v500") def serial_set_servo2(): """ Sends given string to Serial2. """ Serial2.println("$v900") def serial_rx(): """ Returns received data

global data if (Serial2.available()): # There's incoming data data = '' while(Serial2.available()): data += Serial2.read() if(Serial2.available() == 0): delay(20) return data


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.