การตั้งค่า DNSSEC เพื่อเพิ่มความปลอดภัยให้กับโดเมนเนม (เฉพาะโดเมนเนมที่จดทะเบียนกับ Thnic และใช้บริการ DNS จาก Cloudflare) โดยเริ่มจาก ฝั่ง Thnic ไปที่โดเมนเนมและคลิกที่ “ตั้งค่า DS” และฝั่ง Cloudflare ไปที่ DNS -> Setting และกด “ENABLE DNSSEC” จากนั้น นำค่า Key Tag, Algorithm, Digest Type และ Digest มาใส่ตามภาพ
ผู้เขียน: IOT Man
ระบบรับชำระเงินแบบออนไลน์
![](https://iot.jpnet.co.th/wp-content/uploads/2023/05/Screen-Shot-2566-05-08-at-20.09.41.png)
ระบบรับชำระเงินแบบออนไลน์ คือระบบที่อำนวยความสะดวกให้กับผู้ปกครอง สามารถทำรายการชำระด้วยการสแกนคิวอาร์โค้ดผ่านแอปพลิเคชันของสมาร์ทโฟนได้ทันที โรงเรียนสามารถสร้างรายการ Bill Payment เพื่อเรียกชำระเงินออนไลน์ เช่น ชำระค่าเทอม, ชำระเงินบำรุงการศึกษา, ชำระค่าประกันอุบัติเหตุ, ชำระเงินค่าธรรมเนียมต่างๆ ของ โรงเรียน, ชำระเงินสมาคมผู้ปกครอง มาพร้อมระบบพิมพ์ใบเสร็จรับเงินที่ใช้งานได้สะดวกง่ายดาย ขอใบเสนอราคา
อัพเดท Cloudflare DNS IP Address ด้วย Python ใน Raspberry Pi
![](https://iot.jpnet.co.th/wp-content/uploads/2021/01/Screen-Shot-2564-01-08-at-18.44.22.png)
หลายคนที่กำลังใช้เน็ตบ้านทำ Server หรืออุปกรณ์ IOT ส่วนใหญ่จะเจอปัญหาคือ Public IP Address จะเปลี่ยนไปในทุกๆ วัน ทำให้ยากต่อการบริหารจัดการ วันนี้เรามีเคล็ดลับดีๆ มาฝากกัน คือการ อัพเดท Cloudflare DNS IP Address ด้วย Python ใน Raspberry Pi ซึ่งก่อนอื่นนั้นมาดูขั้นตอนที่เราต้องทำกันก่อน
- ทำการชี้โดเมนเนมของเราไปใช้บริการ DNS Service ของ Cloudflare ให้เรียบร้อย
- ให้ทำการสร้าง DNS A record ขึ้นมา 1 ชื่อ เช่น home.mydomain.com
- หลังจากนั้นเราจะทำการเขียน Script Python (โค้ดอยู่ด้านล่าง) ให้ทำการอัพเดท IP Address ของเน็ตในบ้าน ให้กับ home.mydomain.com
- ตั้ง Cron job ให้ทำการการ Run script นี้เป็นระยะๆ
- ต่อไปก็สามารถเรียกใช้งานมายังอุปกรณ์หรือระบบในบ้านผ่าน home.mydomain.com ได้ตลอดไป
สำหรับตัวอย่างโค้ดก็สามารถดูได้จากตัวอย่างนี้เลยนะครับ ในส่วนของการใช้งาน หลังจากกำหนดค่าตัวแปรต่างๆ เสร็จให้ทำการรันโค้ด 1 ครั้งก่อน เพื่อหาค่า RECORD_ID ของ dns record ที่เราจะทำการอัพเดท IP เมื่อได้ค่า id มาแล้ว ก็เอามาใส่ให้กับตัวแปร RECORD_ID ได้เลยครับ
#!/usr/bin/env python
import requests
import json
import sys
IP_API = 'https://api.ipify.org?format=json' #อ่านค่า Public IP ของเน็ตที่กำลังใช้งานอยู่
CF_API_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' #ค่า Global API Key เอาจาก Cloudflare ตรงเมนู 'My Profile'
CF_EMAIL = 'xxxxxx@myemail.com' #อีเมล์ที่เป็น Username ของ Cloudflare
ZONE_ID = '111xxxxxxxxxxxxxxxxxxxxxx' #ดูจากหน้า Dashboard ของโดเมนเนม ใน Cloudflare
RECORD_ID = '' ##ค่า RECORD_ID นี้ให้ทำการรัน Script ก่อน 1 ครั้ง จากนั้นระบบจะแสดงผล เป็นชื่อ dns name ที่เราสร้างไว้ใน DNS ของ Cloudflare ให้คัดลองตรง "id": "xxxxxxx" มาใส่
if not RECORD_ID:
resp = requests.get(
'https://api.cloudflare.com/client/v4/zones/{}/dns_records'.format(ZONE_ID),
headers={
'X-Auth-Key': CF_API_KEY,
'X-Auth-Email': CF_EMAIL
})
print(json.dumps(resp.json(), indent=4, sort_keys=True))
print('Please find the DNS record ID you would like to update and entry the value into the script')
sys.exit(0)
resp = requests.get(IP_API)
ip = resp.json()['ip']
resp = requests.put(
'https://api.cloudflare.com/client/v4/zones/{}/dns_records/{}'.format(
ZONE_ID, RECORD_ID),
json={
'type': 'A',
'name': 'myname.myweb.com',
'content': ip,
'proxied': False
},
headers={
'X-Auth-Key': CF_API_KEY,
'X-Auth-Email': CF_EMAIL
})
assert resp.status_code == 200
print('Updated dns record for {}'.format(ip))
โค้ดนี้ดัดแปลงมาจากลิ้งค์นี้นะครับ
https://www.nathanvangheem.com/posts/2018/07/15/auto-update-cloudflare-dns.html
อย่าลืมกดติดตามเราใน Page https://www.facebook.com/iot.pf นะครับ เราจะลงบทความบ่อยๆ
Python ส่งไฟล์ภาพจากในเครื่องของเราไปยัง Line Notify
![](https://iot.jpnet.co.th/wp-content/uploads/2021/01/Screen-Shot-2564-01-04-at-20.29.07.png)
Post นี่สำหรับคนที่กำลังฝึกเขียน Python ลองนำไปเล่นกันได้เลยครับ เป็นโค้ดง่ายๆ สำหรับการส่งไฟล์ภาพจากในเครื่องของเราไปยัง Line Notify
Source: https://github.com/jpnetwork/Python-Line-Local-Image
PHP ส่งข้อความไปยัง LINE Notify พร้อมไฟล์ภาพที่อยู่ใน Local Disk
![](https://iot.jpnet.co.th/wp-content/uploads/2020/12/127551270_1480769142122627_5352982635349518734_o-scaled.jpg)
ใครที่ทำระบบและต้องการส่งข้อความไปยัง LINE Notify เพื่อแจ้งเตือน สามารถเอา Script นี้ไปใช้งานได้เลยครับ โดยสามารถส่งข้อความ, สติกเกอร์ และไฟล์ภาพ จากเครื่องของเราเอง เข้าไปยัง Line ได้ทันที โดยสิ่งที่แตกต่างจาก Script ที่แจกกันอยู่ทั่วไปๆ นั้นคือ ไฟล์ภาพจะเป็นไฟล์ที่อยู่ใน local disk ของเราเอง ไม่ใช่การดึงภาพมาจาก URL ที่อยู่ในอินเตอร์เน็ตอยู่แล้วนั่นเอง
![](https://iot.jpnet.co.th/wp-content/uploads/2020/12/Screen-Shot-2563-12-04-at-07.38.32-1024x829.png)
สำหรับในส่วนโค้ด PHP สามารถไปดูได้จาก https://github.com/jpnetwork/PHP-LINE-Local-image
ปรับแต่ง Arduino IDE ให้เป็น Dark Theme กันเถอะ
![](https://iot.jpnet.co.th/wp-content/uploads/2020/11/Screen-Shot-2563-11-01-at-08.07.54.png)
สำหรับบทความนี้ก็คงจะถูกใจขา IOT DEV ที่ชอบทำงานภายใต้ Dark Theme กันพอสมควร เนื่องจากเราจะทำการแปลงโฉม Arduino IDE ให้เป็น Dark Theme อันดับแรกไป Download เจ้า Dark Theme กันก่อนที่ https://github.com/konrad91/OneDarkArduino เมื่อโหลดเสร็จให้ทำการ Exract ZIP ไฟล์ (OneDarkArduino-master.zip) ออกมาจะได้โฟลเดอร์ OneDarkArduino-master ที่ด้านในจะมีโฟลเดอร์ theme อยู่ครับ
![](https://iot.jpnet.co.th/wp-content/uploads/2020/11/Screen-Shot-2563-11-01-at-08.11.50-1024x849.png)
ให้ทำการ Copy โฟลเดอร์ theme ไปใส่ในที่อยู่ของ Arduino IDE ในเครื่องของเรา หากใช้งาน Windows ก็จะอยู่ที่ C:\Program Files (x86)\Arduino\lib สำหรับสาวก Mac ~/Applications/Arduino.app/Contents/Java/lib ส่วนใครที่ใช้งาน Linux ก็ไปวางที่ /usr/share/arduino/lib/
โดยก่อนที่จะ Copy โฟลเดอร์ theme ใหม่ไปวางนั้น ควรทำการลบ โฟลเดอร์ theme เดิมทิ้ง หรือในกรณีที่ต้องการกลับไปใช้งานก็ควรเปลี่ยนชื่อโฟลเดอร์ theme เป็นชื่ออื่นไปก่อนครับ
หลังจากนั้นให้ทำการเปิดโปรแกรม Arduino IDE ก็จะพบกับ Dark Theme ซึ่งหลายๆ คน ชอบใช้งานเนื่องจากทำให้รู้สึกสบายสายตาตอนที่เขียน Code นั่นเองครับ
![](https://iot.jpnet.co.th/wp-content/uploads/2020/11/Screen-Shot-2563-11-01-at-08.07.54-1024x754.png)
กราฟข้อมูล COVID-19 ดึงจาก API ของกรมควบคุมโรค
![](https://iot.jpnet.co.th/wp-content/uploads/2020/04/Screen-Shot-2563-03-31-at-20.56.47.png)
ทางกรมควบคุมโรค กระทรวงสาธารณสุข ออก API เกี่ยวกับ Covid-19 ให้สามารถเข้าไปดึงข้อมูลมาพัฒนาต่อได้ ดูรายละเอียดได้จากลิ้งนี้ https://covid19.th-stat.com/th/api เลยลองเขียน PHP ดึงค่ามาลงในกราฟดูหน่อย ใครอยากเอาไปเล่นต่อ ไปเอาโค้ดได้ที่นี่ครับ https://github.com/jpnetwork/Covid-19-Graph
PHP ฟังชั่นแปลงตัวเลขจำนวนเงินเป็นตัวอักษร
พักเรื่อง IOT มาเขียน PHP กันบ้างดีกว่า สำหรับวันนี้จะแนะนำ ฟังชั่น PHP สำหรับ แปลงตัวเลขจำนวนเงินเป็นตัวอักษร เหมาะสำหรับคนที่กำลังทำ Project เกี่ยวกับเรื่อง เงินๆ ทอง ๆ เช่น ในใบเสร็จรับเงิน ใบแจ้งชำระ มาใช้ฟังชั่นนี้ได้เลย เพราะมันจะแปลงค่าตัวเลข (เงิน) ใ้ห้เป็นข้อความโดยอัตโนมัติ ลองดูโค้ดได้จาก https://github.com/jpnetwork/PHP-Thaibaht
![](https://iot.jpnet.co.th/wp-content/uploads/2020/03/Screen-Shot-2563-03-13-at-15.46.04-1009x1024.png)
ทำไฟ built-in LED ให้กระพริบ ด้วย ESP8285
![](https://iot.jpnet.co.th/wp-content/uploads/2020/02/IMG_8602-1024x834.jpg)
ตัวบอร์ด ESP8285 จะมี built-in LED ที่เชื่อมต่ออยู่กับขา Digital Pin 16 ดังนั้น Post นี้เราจึงมาลองทำไฟกระพริบ (Blink) โดยไม่ต้องต่ออุปกรณ์เพิ่มเติมอะไรเลย
มาดูตัวอย่างโค้ดกัน (อย่าลืมกดปุ่ม FLASH ตอนที่ทำการอัพโหลด)
int MYLED = 16;
void setup() {
pinMode(MYLED, OUTPUT);
}
void loop() {
digitalWrite(MYLED, HIGH);
delay(500);
digitalWrite(MYLED, LOW);
delay(300);
}
![](https://iot.jpnet.co.th/wp-content/uploads/2020/02/Screen-Shot-2563-02-09-at-22.37.24-1024x623.png)
ไม่ยากใช่มั้ยละ ถ้าทำได้แล้วลอง ปรับค่า delay ให้ เร็วหรือช้าลง ตามความต้องการดูนะครับ
ESP8285 ทำการ Query ข้อมูลจาก Mysql Database
![](https://iot.jpnet.co.th/wp-content/uploads/2019/01/C394F7EA-DC1D-4580-86B9-7A8327693E91.jpg)
สวัสดีครับ บทความนี้จะมาแนะนำการ Query ข้อมูลจาก MySQL Database มีวัตถุประสงค์คือการให้ บอร์ด ESP8285 สามารถทำการ Select ข้อมูลจากฐานข้อมูล MySQL ตามเงื่อนไขที่กำหนด ซึ่งค่าที่ได้สามารถนำไปแสดงผลหรือใช้งานต่อ เช่นการทำระบบทาบบัตร RFID เพื่อการยืนยันตัวตนว่าบัตรที่ทาบนั้นมีอยู่ในระบบหรือไม่ หรือการทำระบบเช็คยอดเงินคงเหลือในบัตร เมื่อผู้ใช้งานนำบัตรเงินสดมาทาบกับเครื่องอ่านก็ให้ทำการตรวจสอบยอดเงินคงเหลือจากฐานข้อมูล เพื่อแจ้งแก่ผู้ใช้งานต่อไป
หมายเหตุ: ในบทความนี้จะเป็นการติดต่อกันระหว่าง NodeMCU ESP8285 กับ Mysql Server โดยตรง โดยไม่ใช่การส่งข้อมูลหรือเรียกข้อมูลด้วยไฟล์ PHP แต่อย่างใด
ก่อนการเริ่ม เรามาตรวจสอบสิ่งที่ต้องมีกันก่อน
- บอร์ด ESP8285
- Library MySQL_Connector_Arduino
- ฐานข้อมูล MySQL สามารถจำลองสร้างแบบ local host หรือหากใช้งานจริงๆ ก็สั่งซื้อ Cloud Hosting จาก www.plathong.net ได้นะครับ (เนียนขายของ)
![](https://iot.jpnet.co.th/wp-content/uploads/2019/01/Screen-Shot-2562-01-07-at-15.58.57-1024x568.png)
เมื่อทุกอย่างพร้อมก็มาเริ่มดูโค้ดไปทีละส่วนกันเลยครับ เริ่มจากส่วนแรกคือการตั้งค่า WiFi และ ข้อมูลการเชื่อมต่อ MySQL Server
![](https://iot.jpnet.co.th/wp-content/uploads/2019/01/Screen-Shot-2562-01-07-at-17.13.34-1024x501.png)
โค้ดส่วนถัดไปจะเป็น void setup ซึ่งจะเป็นการเชื่อมต่อ WIFI และการ Connect ไปยัง MySQL Server นั่นเอง
![](https://iot.jpnet.co.th/wp-content/uploads/2019/01/Screen-Shot-2562-01-07-at-17.15.00-1024x767.png)
สำหรับโค้ดในส่วนของ Loop นั้นจะเป็นการ Query ตามเงื่อนไข “SELECT * FROM DBName.TableName WHERE id = ‘5’ ” ซึ่งค่าที่ได้คือชื่อเมืองที่มี id=5 นั่นเอง (สำหรับบทความนี้เป็นขั้นตอนการ Query แบบพื้นฐานที่สุด) ในตัวอย่างจะให้ทำการ Query วนลูปไปทุกๆ 10 วินาที
![](https://iot.jpnet.co.th/wp-content/uploads/2019/01/Screen-Shot-2562-01-07-at-17.21.01-1024x513.png)
สามารถคัดลอกโค้ดทั้งหมดได้ที่นี่ครับ หรือ https://github.com/sujanepanjan/Arduino-Query-MySQL
#include <ESP8266WiFi.h>
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>
const char* ssid = "WIFI-SSID";
const char* password = "WIFI-PASSWORD";
byte mac_addr[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress server_addr(192,168,1,100); // IP ของ MySQL server
char dbuser[] = "DB-USERNAME"; // MySQL username
char dbpassword[] = "DB-PASSWORD"; // MySQL password
// SELECT query (เงื่อนไขในการ Query ข้อมูล)
char query[] = "SELECT * FROM DBName.TableName WHERE id = '5' "; //กำหนดชื่อฐานข้อมูลและชื่อตาราง DBName.TableName
WiFiClient client;
MySQL_Connection conn((Client *)&client);
void setup() {
Serial.begin(115200);
delay(10);
// Connect to a WiFi network
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("WiFi connected to ");
Serial.print("IP : ");
Serial.println(WiFi.localIP());
Serial.println("Your device is now online to internet.");
Serial.println("");
//MySQL Connection
Serial.println("Connecting...");
if (conn.connect(server_addr, 3306, dbuser, dbpassword)) {
delay(1000);
Serial.println("MySQL Connected.");
}
else
Serial.println("Connection failed.");
//conn.close();
}
void loop() {
row_values *row = NULL;
//String head_count ;
delay(10000);
Serial.println("Selecting data.");
MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
cur_mem->execute(query); // Execute the query
column_names *columns = cur_mem->get_columns(); // Fetch the columns
// Read the row (we are only expecting the one)
do {
row = cur_mem->get_next_row();
if (row != NULL) {
Serial.println(row->values[1]); //ค่าที่ SELECT ได้จากฐานข้อมูล
}
} while (row != NULL);
delete cur_mem; // Deleting the cursor also frees up memory used
}
ในส่วนของฐานข้อมูล เราสามารถสร้างตารางข้อมูลง่าย ๆ ขึ้นมาดังตัวอย่างเช่น
![](https://iot.jpnet.co.th/wp-content/uploads/2019/01/Screen-Shot-2562-01-07-at-16.23.59-1024x634.png)
เมื่อทุกอย่างพร้อมให้ทำการ Upload โค้ดไปยังบอร์ด และเปิด Serial Monitor เพื่อดูค่าที่ได้ จากภาพคือระบบแสดงค่าชื่อเมือง ซึ่งก็คือ Hong Kong (id=5) นั่นเอง
![](https://iot.jpnet.co.th/wp-content/uploads/2019/01/Screen-Shot-2562-01-07-at-16.23.21-1024x496.png)