วันศุกร์ที่ 16 มิถุนายน พ.ศ. 2560

ESP8266 on NodeMCU

Week #1

เนื้อหาที่เกี่ยวข้อง
-       ESP8266 on NodeMCU

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)

-       MAX7219 Display

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.1         Add NodeMCU Board to Arduino IDE 1.8.x (ตาม http://www.homeofmaker.com/?p=1023 )
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.4.3          ใช้มือถือ หรือ Notebook Connect ไปยัง AP ของตัวเอง



1.4.4          ใช้ Chrome เข้าไปยัง IP ของ Server

1.5         ทดสอบการทำงาน ให้ NodeMCU เป็น Web Server
1.5.2          ทดสอบโปรแกรม TestESP8622 Web Control
1.5.3          ใช้ Chrome เข้าไปยัง IP ของ Server


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.1         Add Lib : https://github.com/squix78/MAX7219LedMatrix
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 ในการพัฒนาโปรแกรม



เอกสาร แหล่งข้อมูลอ้างอิง


ไม่มีความคิดเห็น:

แสดงความคิดเห็น

NI labview 2014

NI labview 2014 โปรแกรม LabVIEW ย่อมาจาก Laboratory Virtual Instrument Engineering Workbench โปรแกรมที่ พัฒนาขึ้นมาโดยใช้ LABVIEW ...