Download presentation
Presentation is loading. Please wait.
1
崑山科技大學 微處理機應用暨實習(一) 講師:曹永忠 日期:105學年度第二學期
Ameba 8195AM 網路程式開發基本介紹 崑山科技大學 微處理機應用暨實習(一) 講師:曹永忠 日期:105學年度第二學期
2
大 綱 前言 空氣盒子產品 Arduino 程式介紹 Arduino 程式介面 Arduino架構 程式開發 啟動開發環境 Q&A 關於作者
參考資料 2019/4/27
3
Arduino 程式介紹 2019/4/27
4
Arduino 程式架構 2019/4/27 4
5
Arduino程式的介面 功能表
6
將程式燒入到 Arduino 開啟舊檔 回傳值 同等於C語言的Rebuild All 儲存檔案 開新檔案
7
撰寫程式內容 要注意是否連線, 若未連線可以Rebuild但不可燒入
8
未連線 已連線
9
Arduino程式架構 (一.)宣告: Arduino宣告方式與C相同,例如:int,float… (二.)初始化 Setup(): 使Arduino板子裝置妥當的指令 EX: int ledPin=7; / 宣告Arduino7號腳為輸入腳/ Setup() { pinMode(ledPin,INPUT); }
10
(三.)執行Loop(): 為程式的主要內容,這程式內容會一直重複被執行 EX: Loop() { …… }
11
(四. )函式: 1. pinMode(7,INPUT) //將腳位7設定為輸入模式 2
(四.)函式: 1. pinMode(7,INPUT) //將腳位7設定為輸入模式 2. digitalWrite(8,HIGH) (數位腳專用) //將腳位8設定輸出高電位 3. val=digitalRead(7) (數位腳專用) //讀出腳位7的值並指定給 val變數
12
4. analogWrite(9,128) (數位訊號專用所設計的函式) //將擁有PWM的數位腳位9 設定輸出電位2
4.analogWrite(9,128) (數位訊號專用所設計的函式) //將擁有PWM的數位腳位9 設定輸出電位2.5V對應值大 約為 val=analogRead(0) (類比腳專用) //讀出腳位0的值並指定給 val變數(且analogRead可讀 取範圍0(0V)~1023(5V))
13
系統開發 2019/4/27 13
14
啟動開發環境 2019/4/27 14
15
開啟程式 2019/4/27 15
16
啟動程式 2019/4/27 16
17
選擇開發版 2019/4/27 17
18
確定通訊埠 2019/4/27 18
19
選擇通訊埠 2019/4/27 19
20
開啟程式 2019/4/27 20
21
讀取WIFI MAC資料 2019/4/27 21
22
開啟程式CheckMac 2019/4/27 22
23
CheckMac 程式重點解說 #include <WiFi.h> 使用網路必要函數
uint8_t MacData[6]; 儲存 MAC資料 GetWifiMac() 取得MAC函數 WiFi.status(); 顯示WIFI狀態 WiFi.macAddress(MacData); 取得MAC資料 print2HEX() 轉換內容為十六進位碼 2019/4/27 23
24
檢查AP是否連接的上 2019/4/27 24
25
開啟程式CheckAP 2019/4/27 25
26
CheckAP程式重點解說 #include <WiFi.h> 使用網路必要函數
uint8_t MacData[6]; 儲存 MAC資料 IPAddress Meip ,Megateway ,Mesubnet ; 宣告ip、閘道器、子網路遮罩 int status = WL_IDLE_STATUS; 連線網路狀態 GetWifiMac() 取得MAC函數 ShowMac() ; 秀出MAC資料 WiFi.status(); 顯示WIFI狀態 WiFi.macAddress(MacData); 取得MAC資料 initializeWiFi(); 進行連線 printWifiData() ; 列印網路狀態資訊 2019/4/27 26
27
CheckAP程式重點解說 status = WiFi.begin(ssid); 不使用加密連AP
status = WiFi.begin(ssid, pass); 使用加密連AP status == WL_CONNECTED 連AP是否成功 WiFi.status() 連接成功狀態 Meip = WiFi.localIP(); 取得連線IP Megateway = WiFi.gatewayIP();取得連線閘道器 WiFi.subnetMask(); 取得連線子網路遮罩 2019/4/27 27
28
ScanNetworks(掃描AP) 2019/4/27 28
29
開啟程式ScanNetworks 2019/4/27 29
30
ScanNetworks 程式重點解說 #include <WiFi.h> 使用網路必要函數
WiFi.status() == WL_NO_SHIELD 檢查有網路供能否 WiFi.firmwareVersion();檢查網路韌體版本 listNetworks() 列出可連接到的AP(自訂) WiFi.scanNetworks(); 取得可連接到的AP並存入(-1為沒有AP可連接) WiFi.SSID(n) 可連接到的AP(n)的名字 WiFi.RSSI(n) 可連接到的AP(n)的RSSI WiFi.encryptionTypeEx(n)可連接到的AP(n)的加密方式I 2019/4/27 30
31
WIFIAPMODE(啟動AP模式) 2019/4/27 31
32
開啟程式WIFIAPMODE 2019/4/27 32
33
WIFIAPMODE程式重點解說 WiFi.apbegin(ssid, pass, channel); 啟動AP模式 SsidAP名字
PassAP 連線密碼 ChannelAP 連線通道 printWifiData(); 列印網路資訊 WiFi.BSSID(bssid); 列印AP網路資訊 WiFi.encryptionType(); AP加密狀態 2019/4/27 33
34
WebServerControlRelay 使用Client模式建立網頁伺服器
2019/4/27 34
35
開啟程式WebServerControlRelay
2019/4/27 35
36
電路連接 2019/4/27 36
37
WebServerControlRelay程式重點解說
#include <WiFi.h> 使用網路必要函數 WiFiServer server(80); 啟動PORT 80進行 status = WiFi.begin(ssid); 不使用加密連AP status = WiFi.begin(ssid, pass); 使用加密連AP server.begin(); 開始啟動PORT 80 傾聽 printWifiStatus(); 列印網路資訊 WiFiClient client = server.available(); 有人連接Port 80 client.connected() 有用戶連接中 client.available() 用戶送資料進來 2019/4/27 37
38
WebServerControlRelay程式重點解說
char c = client.read(); 讀出用戶送的資料(一個位元組) client.println(“HTTP/ OK”); …. 送給用戶端一段HTML碼,用瀏覽器方能顯示 currentLine.endsWith(“GET /H”) 判斷是否用/H 結束 currentLine.endsWith(“GET /L”) 判斷是否用/L 結束 client.stop(); 與用戶連線停止傳輸資料 2019/4/27 38
39
網頁畫面 2019/4/27 39
40
APMODEControlRelay 使用AP模式建立網頁伺服器
2019/4/27 40
41
開啟程式APMODEControlRelay
2019/4/27 41
42
電路連接 2019/4/27 42
43
APMODEControlRelay程式重點解說
#include <WiFi.h> 使用網路必要函數 WiFiServer server(80); 啟動PORT 80進行 status = WiFi.begin(ssid); 不使用加密連AP status = WiFi.begin(ssid, pass); 使用加密連AP server.begin(); 開始啟動PORT 80 傾聽 printWifiStatus(); 列印網路資訊 WiFiClient client = server.available(); 有人連接Port 80 client.connected() 有用戶連接中 client.available() 用戶送資料進來 2019/4/27 43
44
APMODEControlRelay程式重點解說
char c = client.read(); 讀出用戶送的資料(一個位元組) client.println(“HTTP/ OK”); …. 送給用戶端一段HTML碼,用瀏覽器方能顯示 currentLine.endsWith(“GET /H”) 判斷是否用/H 結束 currentLine.endsWith(“GET /L”) 判斷是否用/L 結束 client.stop(); 與用戶連線停止傳輸資料 2019/4/27 44
45
網頁畫面 2019/4/27 45
46
Set_RTC_Data(設定RTC時間)
2019/4/27 46
47
開啟程式Set_RTC_Data 2019/4/27 47
48
電路連接 2019/4/27 48
49
電路連接 2019/4/27 49
50
Set_RTC_Data程式重點解說 #include <Wire.h> I2C通訊用
#include “RTClib.h“ DS1307 時鐘模組用 RTC_DS1307 RTC; 宣告時鐘物件 initRTC() ; 啟動時鐘物件(自訂) Wire.begin(); 開始I2C通訊 RTC.begin(); 開始時鐘物件通訊 RTC.isrunning() 時鐘物件順利啟動 RTC.adjust(DateTime(mYear,mMonth,mDay,mHour,mMinute,mSecond)); 調整設定DS1307 時鐘模組時間內容 2019/4/27 50
51
執行畫面 2019/4/27 51
52
ReadTime(讀取RTC時間) 2019/4/27 52
53
開啟程式ReadTime 2019/4/27 53
54
電路連接 2019/4/27 54
55
電路連接 2019/4/27 55
56
ReadTime程式重點解說 #include <Wire.h> I2C通訊用
#include “RTClib.h“ DS1307 時鐘模組用 RTC_DS1307 RTC; 宣告時鐘物件 initRTC() ; 啟動時鐘物件(自訂) Wire.begin(); 開始I2C通訊 RTC.begin(); 開始時鐘物件通訊 RTC.isrunning() 時鐘物件順利啟動 ShowDateTime() 顯示DS1307 時鐘內容(自訂) 2019/4/27 56
57
ReadTime程式重點解說 DateTime now = RTC.now(); 取得RTC時鐘物件 now.hour() 取得小時
now.minute() 取得分 now.second() 取得秒 now.year() 取得年 now.month() 取得月 now.day() 取得日 2019/4/27 57
58
執行畫面 2019/4/27 58
59
UdpNtpClient 讀取網路時間資料
2019/4/27 59
60
開啟程式UdpNtpClient 2019/4/27 60
61
UdpNtpClient程式重點解說 #include <WiFi.h> 使用網路必要函數
#include <PubSubClient.h>使用網路UDP必要函數 #include <WiFiUdp.h>使用網路UDP必要函數 uint8_t MacData[6]; 儲存 MAC資料 const char ntpServer[] = “pool.ntp.org”; 網路時間伺服器 initializeWiFi(); 啟動網路 ShowNTPDateTime() ; 取得網路時間並顯示 retrieveNtpTime() ;取得網路時間 getCurrentTime(epoch+timeZoneOffset, &NDPyear, &NDPmonth, &NDPday, &NDPhour, &NDPminute, &NDPsecond); 將網路時間存入變數 2019/4/27 61
62
UdpNtpClient程式重點解說 Udp.beginPacket(ntpServer, 123) 與網路伺服器通訊
Udp.write(nptSendPacket, NTP_PACKET_SIZE); 告訴網路伺服器要取得時間 Udp.endPacket(); 結束通訊 Udp.parsePacket() 得到網路伺服器傳送時間資料通知 Udp.read(ntpRecvBuffer, NTP_PACKET_SIZE) 讀取網路伺服器傳送時間資料 epoch = secsSince seventyYears ; 計算時間 epochSystem = epoch - millis() / 1000;計算時間(秒) getCurrentTime() 計算網路時間,回傳年、月、日、時、分、秒到變數 2019/4/27 62
63
執行畫面 2019/4/27 63
64
SetTime_fromNet 網路校時 2019/4/27 64
65
開啟程式SetTime_fromNet 2019/4/27 65
66
SetTime_fromNet程式重點解說
#include <WiFi.h> 使用網路必要函數 uint8_t MacData[6]; 儲存 MAC資料 initRTC() ; 初始化時鐘模組 ShowNTPDateTime() ; 取得網路時間並顯示 retrieveNtpTime() ;取得網路時間 getCurrentTime(epoch+timeZoneOffset, &NDPyear, &NDPmonth, &NDPday, &NDPhour, &NDPminute, &NDPsecond); 將網路時間存入變數 SetRTCTime(NDPyear, NDPmonth, NDPday, NDPhour, NDPminute, NDPsecond); 將取得網路時間調整時鐘模組 2019/4/27 66
67
執行畫面 2019/4/27 67
68
WiFiWebClient 讀取網頁資料 2019/4/27 68
69
開啟程式WiFiWebClient 2019/4/27 69
70
WiFiWebClient程式重點解說 #include <WiFi.h> 使用網路必要函數
uint8_t MacData[6]; 儲存 MAC資料 GetWifiMac() 取得MAC函數 WiFi.status(); 顯示WIFI狀態 printWifiStatus(); 列印網路狀態 client.connect(server, 80) 連到Server(用port80) client.println(“GET /search?q=ameba HTTP/1.1”); 送給伺服器端資料 client.available() 連線對象要送資料 char c = client.read(); 讀取連線對象要送資料 2019/4/27 70
71
lcd1602_I2C_mills 顯示資料在LCD上
2019/4/27 71
72
開啟程式lcd1602_I2C_mills 2019/4/27 72
73
開啟程式lcd1602_I2C_mills 2019/4/27 73
74
lcd1602_I2C_mills程式重點解說 #include <I2CIO.h> I2C 函數
#include <LCD.h> LCD函數 #include <LiquidCrystal_I2C.h> I2C版LCD函數 #define I2C_ADDR 0x27 設定LCD I2C位址 lcd.begin (16,2); 設定LCD寬度與高度 lcd.setBacklight(LED_ON); 設定LCD背光 lcd.backlight();啟動LCD背光 lcd.setCursor(0,0); LCD歸零定位 lcd.print(“Hello, world!”); 印出Hello World 2019/4/27 74
75
DHTx 讀取溫溼度資料 2019/4/27 75
76
開啟程式DHTx 2019/4/27 76
77
電路連接 2019/4/27 77
78
電路連接 2019/4/27 78
79
DHTx 程式重點解說 #include “DHT.h” 使用溫溼度模組必要函數
#define DHTTYPE DHT22 宣告使用哪種DHT溫溼度模組 DHT dht(DHTSensorPin, DHTTYPE); 取得溫溼度物件 dht.begin(); 溫溼度物件通訊 ShowHumidity() ; 顯示溫溼度資料(自訂) dht.readHumidity(); 讀取濕度 ht.readTemperature(true); 讀取溫度 2019/4/27 79
80
Q & A 感謝聆聽 恭請指教 2019/4/27
Similar presentations