เนื้อหาที่เกี่ยวข้อง
Deaware เอา NodeMCU
devkit มาให้ลองเล่น บอร์ดตัวนี้เป็นบอร์ดที่รวมเอา ESP8266 (ESP-12) + USB to Serial + NodeMCU firmware เข้าไว้ด้วยกัน
ทำให้การใช้งานง่ายมากขึ้น ไม่ต้องมีอุปกรณ์ต่อพ่วงเยอะ แถมมี GPIO เพิ่มเป็น 10 พอร์ท เพียงพอต่อการใช้งาน สำหรับ NodeMCU devkit ที่ได้มาเป็นบอร์ดเปล่าๆ ใช้ AT Command ในการสั่งงาน
ชีวิตไม่อิสระเท่าไร แต่ทางผู้พัฒนา Board ก็มี NodeMCU
Firmware ให้คุณสามารถเขียน Lua ใส่ลงไปได้
ทำให้การใช้งานง่ายมากขึ้น
ตัว devkit
มี port GPIO มาให้อยู่ 10 port เป็นแบบ Digital และที่สำคัญมี Wifi Serial มาให้ด้วย เพราะฉนั้นขอให้มี Wifi Router ต่ออินเตอร์เน็ตได้
คุณก็สามารถสร้างโครงงาน Internet of Thing ได้ง่ายๆ
จบในบอร์ดเดียว
ปัจจุบันสามารถเขียน Software
ด้วย Arduino IDE ยิ่งทำให้ผู้พัฒนาทุกคนเริ่มจะสนใจเป็นอีกหลายเท่าตัว
โดย I/O ของบอร์ด มีดังนี้
· GPIO
13 ขา
· ADC (10 bit) 1 ขา
· WiFi
a/b/g
การสื่อสารแบบ Serial
(Tx,Rx)
7 Segment 8-Digit with
MAX7219 Module เป็นโมดูลแสดงผลตัวเลขขนาด 8 หลัก
(8 Digits) โดยมี
IC เบอร์ MAX7219 เป็นตัวควบคุมการทำงาน
เหมาะสำหรับงานที่มีการแสดงผลด้วยตัวเลข
ใช้งานง่ายสามารถควบคุมแต่ละหลักได้อิสระต่อกัน
3. โมดูลเซนเซอร์วัดอุณหภูมิความชื้นความแม่นยำสูง
HDC1080
คำอธิบาย
HDC1080 เป็นเซ็นเซอร์วัดความชื้นแบบดิจิตอลพร้อมเซ็นเซอร์วัดอุณหภูมิแบบบูรณาการที่ให้ความแม่นยำในการวัดที่ยอดเยี่ยมเมื่อใช้พลังงานต่ำมาก
HDC1080 ทำงานผ่านช่วงการจัดหาพลังงานที่กว้างและเป็นทางเลือกที่มีต้นทุนต่ำและประหยัดพลังงานสำหรับโซลูชันการแข่งขันในแอพพลิเคชั่นที่หลากหลาย
เซ็นเซอร์วัดความชื้นและอุณหภูมิถูกปรับเทียบจากโรงงาน
- Lua
Scrip
ภาษา Lua (pronounced
'LOO-ah' หรือออกเสียงว่า 'ลัว' หรือ 'ลูอ่า' ในภาษาโปรตุเกส)
อาจไม่เป็นที่รู้จักสำหรับโปรแกรมเมอร์ทั่วไปในวงกว้าง
แต่ก็เป็นภาษาคอมพิวเตอร์ที่น่าสนใจ และสามารถนำมาใช้งานได้
ลองมาทำความรู้จักกับภาษานี้ โดยเขียนสรุปเป็นข้อๆ ดังนี้
· Lua เป็นภาษาประเภท Scripting / Interpreted Language หรือภาษาสคริปต์
(อยู่ในประเภทเดียวกับภาษาอย่างเช่น Python)
· มีต้นกำเนิดมาจากทีมพัฒนาในสถาบันการศึกษาแห่งหนึ่งในประเทศบราซิล
(Pontifical Catholic University of Rio de Janeiro, Brazil) ในราวปีค.ศ.
1993
· Lua
script จะถูกแปลงให้เป็น Bytecode ตามรูปแบบคำสั่งของคอมพิวเตอร์เสมือน
(Virtual Machine)
สำหรับภาษานี้ (เช่นเดียวกับกรณีของ Python และ Java ที่มีการทำงานในลักษณะนี้)
· เป็นภาษาที่ชนิดของข้อมูลสำหรับตัวแปรปรับเปลี่ยนได้
(Dynamically-typed
language)
· มีชนิดข้อมูลพื้นฐานคือ
boolean (true,false), numbers (integer &
double-precision
floating point) และ string
· มีโครงสร้างข้อมูลอย่างเช่น
อาร์เรย์(array) ตาราง(table) ซึ่งเป็น
associative array และ เซต(set)
· มีการจัดการหน่วยความจำ
เช่น การจองและคืนหน่วยความจำในขณะทำงาน (automatic memory management &
garbage collection)
· ตัวแปลคำสั่งของภาษา
Lua (Lua
Interpreter) มีขนาดเล็ก(small
& light-weight) และเขียนด้วยภาษา
C
· เป็นซอฟต์แวร์ประเภท
Opensource (MIT
license สำหรับเวอร์ชัน 5.x) ดังนั้นจึงใช้งานได้ฟรี
· ใช้ได้หลายแพลตฟอร์ม(multi-platform
programming language)
อย่างเช่น Windows, Linux, Mac OS X
· มีการใช้งานกับบอร์ดไมโครโทรลเลอร์ได้
อย่างเช่น ESP8266/NodeMCU,
WiFiMCU/EMW3165 เป็นต้น
· สามารถเรียกใช้จากภาษาอื่นได้
(embeddable)
มีการนำไปใช้ในการพัฒนาเกมส์ หรือการพัฒนา Mobile
Apps อย่างเช่น Corona SDK
· อุปกรณ์เครือข่าย
อย่างเช่น Wireless Router ที่ใช้ระบบปฏิบัติการ OpenWrt ซึ่งเป็น Linux และมีการใช้โปรแกรม Luci ซึ่งพัฒนาด้วยภาษา Lua สำหรับการจัดการผ่านหน้าเว็บเพื่อตั้งค่าต่างๆ
ของระบบ (Web configuration interface)
การทดลอง
1.
NodeMCU
1.2
สำคัญคือใส่ URL
>> ลงใน Addition Board Manager URLs: ดังนี้
http://arduino.esp8266.com/stable/package_esp8266com_index.json
1.3
ทดสอบการทำงาน ด้วยโปรแกรม File
à
Example à
Basic à
Blink
1.4
ทดสอบการทำงาน ให้
NodeMCU เป็น Access Point
1.4.1
Open File → Example → ESP8266Wifi → WifiAccessPoint
1.4.2
แก้ไขค่าชื่อ AP และ Password
§
const char *ssid
= "testWichai";
§
const char *password
= "12345678";
Upload โปรแกรมไปยัง WeMos ดูผลการทำงานที่
Serial Monitor(Baud
= 115200)
1.5.1
Read this:
http://arduino-er.blogspot.com/2016/05/nodemcuesp8266-act-as-ap-access-point_3.html
1.5.2
ทดสอบโปรแกรม TestESP8622
– Web
Control
1.5.4
เปิดแชร์มือถือตัวเองเป็น AP
1.5.5
Open File → Example → ESP8266Wifi → NTPClient
1.5.6
แก้ไขค่าชื่อ AP และ Password
§
char ssid[]
= "*************"; //
your network SSID (name)
§
char pass[]
= "********"; // your network
password
1.5.7
Upload โปรแกรมไปยัง NodeMCU ดูผลการทำงานที่
Serial Monitor (Baud
= 115200)
2.
NodeMCU +
MAX7219 Display
2.2
Wiring MAX7219_7segment {Vcc, GND, DIN, CS,
CLK} à {3.3V, GND, D7, D8, D5}
2.3
Open File → Example → MAX7219LedMatrix-master → AnimateText
2.4
Change { NUMBER_OF_DEVICES 1, CS_PIN D8 }
and Click Upload
2.5
Using Test Code for TestMax7219_1
2.6
Using Test Code for TestMax7219_2
คำถามท้ายการทดลอง
1. ต้องการแสดงข้อความ
#include <SPI.h>
#include
"LedMatrix.h"
#include <Wire.h>
#include
"ClosedCube_HDC1080.h"
#define
NUMBER_OF_DEVICES 1
#define CS_PIN D8
LedMatrix ledMatrix =
LedMatrix(NUMBER_OF_DEVICES, CS_PIN);
//Button D3
//SDA in HDC1080 D2
//SCl in HDC1080 D1
//CLK in MAX7219 D5
//DIN in MAX7219 D7
//CS in MAX7219 D8
ClosedCube_HDC1080
hdc1080;
void setup() {
pinMode(D3,
INPUT_PULLUP);
Serial.begin(115200); // For debugging output
ledMatrix.init();
ledMatrix.setIntensity(15); // range is 0-15
ledMatrix.clear();
ledMatrix.commit(); // commit send buffer to the displays
Serial.begin(9600);
Serial.println("ClosedCube HDC1080 Arduino Test");
hdc1080.begin(0x40);
Serial.print("Manufacturer ID=0x");
Serial.println(hdc1080.readManufacturerId(), HEX); // 0x5449 ID of Texas
Instruments
Serial.print("Device ID=0x");
Serial.println(hdc1080.readDeviceId(), HEX); // 0x1050 ID of the device
}
int stat = 1;
void loop() {
ledMatrix.clear();
ledMatrix.commit(); // commit send buffer to the displays
Send2MAX7129(7,
0, 0);
Send2MAX7129(6,
1, 0);
Send2MAX7129(5,
2, 0);
Send2MAX7129(4,
3, 0);
Send2MAX7129(3,
4, 0);
Send2MAX7129(2,
5, 0);
Send2MAX7129(1,
6, 0);
delay(100);
}
//===================================================
// ##SegPosition >> 87654321 ##SegData >> tabcdefg //===================================================
void Send2MAX7129(byte
SegPosition, byte Value, bool dotDigit) {
const static byte
charTable [] = { B01110111,B00000101,B00111101,B00011100,
B00010000,B00010101,B00011101
};
Value =
charTable[Value];
if (dotDigit ==
1) Value |= 0x80;
digitalWrite(CS_PIN, LOW);
SPI.transfer
(SegPosition);
SPI.transfer
(Value);
digitalWrite
(CS_PIN, HIGH);
}
//===================================================
// ##SegPosition >> 87654321 ##SegData >> tabcdefg
//===================================================
void
SendData2MAX7129(byte SegPosition, byte SegData) {
digitalWrite(CS_PIN, LOW);
SPI.transfer
(SegPosition);
SPI.transfer (SegData);
digitalWrite
(CS_PIN, HIGH);
}
2. ใช้ Arduino
IDE ในการพัฒนาโปรแกรมให้อ่านอุณหภูมิจากเซ็นเซอร์แล้วแสดงผลที่ MAX7219_7Segment Display โดยมีรูปแบบดังรูป
//
// TestMax7219_2
//
#include <SPI.h>
#include "LedMatrix.h"
#define NUMBER_OF_DEVICES 1
#define CS_PIN D8
LedMatrix ledMatrix = LedMatrix(NUMBER_OF_DEVICES,
CS_PIN);
void setup() {
Serial.begin(115200); // For
debugging output
ledMatrix.init();
ledMatrix.setIntensity(4); // range
is 0-15
ledMatrix.clear();
ledMatrix.commit(); // commit
send buffer to the displays
}
void loop() {
for (int
i = 9999;
i >= 0; i
-= 7)
{ // ledMatrix.clear();
// ledMatrix.commit(); // commit
send buffer to the displays
// delay(1000);
// Send2MAX7129(8,
1, 0);
// Send2MAX7129(7,
1, 0);
// Send2MAX7129(6,
2, 0);
// Send2MAX7129(5,
2, 0);
int xxx = i;
Send2MAX7129(4,
xxx / 1000,
0);
xxx = xxx % 1000;
Send2MAX7129(3,
xxx / 100,
0);
xxx = xxx % 100;
Send2MAX7129(2,
xxx / 10,
0);
xxx = xxx % 10;
Send2MAX7129(1,
xxx / 1, 0);
delay(10);
}
}
//===================================================
//===================================================
void Send2MAX7129(byte
SegPosition, byte Value, bool dotDigit)
{ const static byte charTable [] =
{ B01111110, B00110000, B01101101,
B01111001,
B00110011, B01011011, B01011111,
B01110000,
B01111111, B01111011, B01110111,
B00011111,
B00001101, B00111101, B01001111,
B01000111
};
Value = charTable[Value];
if (dotDigit
== 1) Value
|= 0x80;
digitalWrite(CS_PIN,
LOW);
SPI.transfer
(SegPosition);
SPI.transfer (Value);
digitalWrite (CS_PIN,
HIGH);
Serial.print(Value);
}
//===================================================
// ##SegPosition
>> 87654321 ##SegData >> tabcdefg
//===================================================
void SendData2MAX7129(byte
SegPosition, byte SegData)
{ digitalWrite(CS_PIN,
LOW);
SPI.transfer
(SegPosition);
SPI.transfer
(SegData);
digitalWrite (CS_PIN,
HIGH);
}
3. จากข้อ
2 ให้ใช้ Lua Scrip ในการพัฒนาโปรแกรม
เอกสาร
แหล่งข้อมูลอ้างอิง
·
HDC1080 -
https://learn.adafruit.com/adafruit-hdc1008-temperature-and-humidity-sensor-breakout?view=all
ไม่มีความคิดเห็น:
แสดงความคิดเห็น