https://nodered.org/docs/getting-started/raspberrypi
blog นี้จะกล่าวถึง Raspberry Pi Raspbian เป็นหลัก โดยจะอธิบายทั้งการใช้ windows และ Linux ในการเชื่อมต่อ วิธีอ่าน : ให้เริ่มอ่านตั้งแต่หัวข้อแรกๆขึ้นมา(ให้ดูที่ "คลังบทความ" ทางด้านขวามือ จะมี วัน-เวลา ไล่เรียงอยู่) ไม่งั้นอาจจะงงได้ สำหรับมือใหม่ หรือท่านใดที่ไม่เข้าใจ สามารถ mail มาถามกันได้ครับ ที่ kongimi1980@gmail.com หรือที่ line : 0814282425
วันอาทิตย์ที่ 26 กันยายน พ.ศ. 2564
วันอังคารที่ 2 มีนาคม พ.ศ. 2564
raspberry pi4 picamera scan qrcode
โปรเจคร้อน ต้องรีบแก้ไข
Scan QR Code โดยใช้ RaspberryPi4 และ pi-camera
sudo raspi-config
เข้าเมนู Interface Options, enable camera
sudo apt-get update
sudo apt-get install libhdf5-serial-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install libjasper-dev
sudo apt-get install libqtgui4
sudo apt-get install libqt4-test
pip3 install opencv-contrib-python==4.1.0.25
pip3 install pyzbar
pip3 install imutils
pip3 install argparse
pip3 install opencv-python
sudo apt-get install libhdf5-dev
sudo apt-get install libhdf5-serial-dev
จากนั้นก็เปิด Thonny python IDE
แล้ว Download Code ได้ที่นี่
https://github.com/kongimi/raspberrypi-camera-qrcode
แล้วแปะ code ลงไปใน Thonny python IDE แล้วกด Run
จะมีภาพจากกล้องแสดงขึ้นมา เราก็เอา QR Code ไปวางบริเวณหน้ากล้อง
ก็จะสามารถอ่าน QR Code ได้
จอบอ
https://circuitdigest.com/microcontroller-projects/qr-code-scanner-using-raspberry-pi-and-opencv
https://stackoverflow.com/questions/53347759/importerror-libcblas-so-3-cannot-open-shared-object-file-no-such-file-or-dire
วันอังคารที่ 19 มกราคม พ.ศ. 2564
ติดตั้ง mysql + phpmyadmin + remote database ให้กับ raspberry pi4
sudo update
sudo upgrade
sudo apt install mariadb-server
หลังจากลงเสร็จแล้ว ก็ต้องตั้ง password ของ database ก่อน โดยใช้คำสั่ง
sudo mysql_secure_installationจะมีให้เราใส่ password ก็ใส่ไป 2 ที
และตอบ Y ทั้งหมด ถ้าเขาถามอะไรขึ้นมา
ทดสอบการใช้งาน และ password ด้วยการเข้าใช้งานด้วยคำสั่ง
sudo mysql -u root -p ใส่ password ที่เราตั้งไว้
ถ้าเราต้องการออก ให้ใช้คำสั่ง
quit;
ทดลองสร้าง database
CREATE DATABASE exampledb; จากนั้นสร้าง user ที่จะสามารถใช้งาน database นี้ได้ โดยตั้งชื่อ user ว่า exampleuser และตั้ง password = pimylifup
CREATE USER 'exampleuser'@'localhost' IDENTIFIED BY 'pimylifeup';ต่อมาเราจะกำหนดสิทธิ์ให้ user ที่จะเข้ามาทำอะไรกับ database นี้ ด้วยคำสั่ง
GRANT ALL PRIVILEGES ON exampledb.* TO 'exampleuser'@'localhost';FLUSH PRIVILEGES;
ถ้าเราไม่ถนัดในการใช้ command line ก็สามารถใช้ phpmyadmin ได้
sudo apt install phpmyadminถ้าเราต้องการใช้ php ติดต่อกับ mysql ก็สามารถทำได้
sudo apt install php-mysql
เริ่มลง phpmyadmin กัน
เมื่อใช้คำสั่ง sudo apt install phpmyadmin แล้ว จะขึ้นหน้าแบบนี้ ให้เราเคาะ space bar เพื่อเลือก apache2 แล้วกด Enter
จากนั้นจะมีหน้าคำถามขึ้นมาให้ตอบ Y แล้วใส่ password ตั้งเป็นอะไรก็ได้ แต่ควรจะให้ต่างจาก password ที่ใช้กับ mysql
มาถึงตอนนี้ เราต้องสร้าง user ใหม่ ให้กับ database ของเรา เพื่อใช้กับ phpmyadmin
sudo mysql -u root -pและใช้คำสั่งนี้ในการสร้าง user
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;โดยแก้ไข username และ passsword ที่เราตั้งไว้ตอนแรก username = exampleuser , password=pimylifeup จะกลายเป็น
GRANT ALL PRIVILEGES ON *.* TO 'exampleuser'@'localhost' IDENTIFIED BY 'pimylifeup' WITH GRANT OPTION;FLUSH PRIVILEGES; เราจะใช้ username และ password นี้ ในการเข้า phpmyadmin
จากนั้นพิมพ์ quit; เพื่อออกจาก mysql
ให้เปิดไฟล์
sudo nano /etc/apache2/apache2.confและเติมบรรทัดนี้ลงไปในด้านล่างสุด
Include /etc/phpmyadmin/apache.conf แล้ว re-start apache2 service
sudo service apache2 restart ใช้คำสั่งนี้ในการสร้าง link
sudo ln -s /usr/share/phpmyadmin /var/www/htmlจากนั้นเปิด browser อะไรก็ได้ แล้วไปที่ http://localhost/phpmyadmin
ถ้าอยากรู้ ip ของ raspberry pi ก็ให้พิมพ์ hostname -I
จะมีให้ใส่ user name และ password
exampleuser / pimylifeup
ถ้าต้องการให้เครื่องอื่นสามารถเข้ามาอ่าน database ของเราได้ ให้แก้ไข localhost เป็น IP ของเครื่องนั้นๆ
GRANT ALL PRIVILEGES ON my_database.* TO user@'192.168.xxx.xxx' IDENTIFIED BY 'password' WITH GRANT OPTION;หรือ GRANT ALL PRIVILEGES ON my_database.* TO user@'192.168.xxx.xxx' IDENTIFIED BY 'password'; FLUSH PRIVILEGES;quit;แล้วก็เข้าไปแก้ไขไฟล์นี้sudo nano /etc/mysql/mariadb.conf.d/50-server.cnfเอา comment ออกport = 3306และ comment #bind-address = 127.0.0.1control+o, enter, control+x restart mysql ด้วยคำสั่ง sudo /etc/init.d/mysql restart
จอบอ
ที่มา
https://pimylifeup.com/raspberry-pi-mysql/
วันพฤหัสบดีที่ 14 มกราคม พ.ศ. 2564
rpi real time clock ds3231
วันนี้ได้มีโอกาสใช้ Real Time Clock กับ Rpi เป็นครั้งแรก โดยใช้ชิปเบอร์ ds3231
มาถึงก็ต่อสายก่อนเลย
RTC RPi
VCC 1
GND 6
SCL 5
SDA 3
sudo apt-get update
sudo apt-get upgrade
sudo raspi-conifg
enable i2c
sudo reboot
sudo apt-get install python-smbus i2c-tools
sudo i2cdetect -y 1
จะเห็น address 68
sudo nano /boot/config.txt
เพิ่มบรรทัดนี้เข้าไปที่ด้านล่างสุดของไฟล์
dtoverlay=i2c-rtc,ds3231
ctrl+o, ctrl+x
sudo reboot
sudo apt-get -y remove fake-hwclock
sudo update-rc.d -f fake-hwclock remove
sudo nano /lib/udev/hwclock-set
มาหาบรรทัดนี้
if [ -e /run/systemd/system ] ; then
exit 0
fiแล้ว comment out แบบนี้
#if [ -e /run/systemd/system ] ; then
# exit 0
#fictrl+o, ctrl+x
เราสามารถอ่านเวลาจาก rtc ได้ด้วยคำสั่งนี้
sudo hwclock -D -rก่อนที่เราจะทำการ sync เวลาจาก rpi ของเราไปที่ rtc ต้องเช็คก่อนว่าเวลาที่ rpi เป็นเวลาที่ถูกต้อง ด้วยคำสั่ง
dateถ้าเวลาไม่ตรงกับปัจจุบัน ให้เราต่อ rpi กับ internet เสียก่อน
ถ้าเวลาถูกต้องดีแล้ว ก็จะใช้คำสั่งนี้ในการเขียนข้อมูลเวลาไปที่ rtc
sudo hwclock -wให้เราลองอ่านเวลาจาก rtc ดู ด้วยคำสั่งนี้
sudo hwclock -rเราก็จะได้มีเวลาเป็นของตัวเองสักที
จอบอ
https://www.nelisys.com/tutorials/raspberry-pi-rtc-ds3231
https://pimylifeup.com/raspberry-pi-rtc/
วันอังคารที่ 12 มกราคม พ.ศ. 2564
python check process running
ถ้าเราต้องการตรวจสอบว่า โปรแกรมที่เราเขียนยังทำงานอยู่ไหม ทำดังนี้
ลง psutil
pip install psutil
สร้างไฟล์ checkMyProgram.py ที่ /home/pi เพื่อเช็คการทำงานของโปรแกรมที่ชื่อว่า MyProgram
import psutil
import datetime
def checkIfProcessRunning(processName):
'''
Check if there is any running process that contains the given name processName.
'''
#Iterate over the all the running process
for proc in psutil.process_iter():
try:
# Check if process name contains the given name string.
if processName.lower() in proc.name().lower():
return True
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
pass
return False;
time = datetime.datetime.now()
fileName = "/home/pi/TagAgent/MyProgramLog" + time.strftime("%Y-%m-%d_%H") +".txt"
d = open(fileName, "a")
d.write(time.strftime("%H:%M:%S"))
if checkIfProcessRunning('MyProgram'):
d.write(" MyProgram still alive!\n")
d.close()
else:
d.write(" Not found MyProgram!\n")
d.close()
หลังจากการรัน checkMyProgram.py ด้วยคำสั่ง python checkMyProgram.py แล้ว จะมีการสร้างไฟล์ที่ชื่อว่า /home/pi/MyProgramLogตามด้วยปีเดือนวันชั่วโมง.txt ขึ้นมา
เพื่อให้มาเปิดดูในภายหลังว่า โปรแกรม MyProgram ยังทำงานอยู่หรือไม่ หรือว่าตายไปตั้งแต่ช่วงไหน
ถ้าเราต้องการเช็คทุก 1 นาที ก็ให้ใช้ crontab เข้าช่วย
crontab -e
เพิ่มเข้าไปบรรทัดสุดท้าย
* * * * * python /home/pi/checkMyProgram.py
https://thispointer.com/python-check-if-a-process-is-running-by-name-and-find-its-process-id-pid/
https://www.programiz.com/python-programming/datetime/current-time
https://www.w3schools.com/python/python_datetime.asp
วันศุกร์ที่ 25 ธันวาคม พ.ศ. 2563
sqlite3 rpi4 Qt
ต้องลง sqlite3 ก่อน
sudo apt-get update
sudo apt-get install sqlite3
จากนั้นลง sqlitebrowser ตาม
sudo apt-get install sqlitebrowser
สร้าง database ดังนี้
$ sqlite3 test.db
sqlite> CREATE TABLE people(ids integer primary key, name text);
sqlite> .quit
ต่อมา จะเขียนโปรแกรมใน Qt ให้สามารถติดต่อกับ Database ได้
เมื่อเปิดโปรแกรม Qt ขึ้นมา ให้เปิด ไฟล์.pro และพิมพ์เพิ่มเข้าไปแบบนี้
QT += sql
คลิกขวาที่โปรเจค แล้วกด Run Qmake
คลิกขวาที่โปรเจค เพื่อเพิ่ม class
ตั้งชื่อ class ว่า dbmanager
เมื่อสร้าง class เสร็จแล้ว เราจะได้ dbmanager.h และ dbmanager.cpp มา
ในไฟล์ dbmanager.h ให้เขียน code ดังนี้
ส่วนไฟล์ dbmanager.cpp ให้เขียนดังนี้
ในไฟล์ main.cpp ให้เพิ่ม code ดังนี้จากนั้นกด Run ก็จะเห็นว่ามีการสร้าง database ขึ้นมาแล้ว ในโฟลเดอร์ที่ระบุไว้
ถ้าหากเราต้องการฟังก์ชั่นอื่นๆที่สามารถจัดการกับ database ได้ ให้ทำดังนี้
1.เพิ่มใน dbmanager.h ในที่นี้ผมจะเพิ่มฟังก์ชั่นที่ชื่อว่า AddRecord โดยรับค่า QString เข้าไป
2.เพิ่มใน dbmanager.cppแล้วกด Run จะเห็นได้ว่า database ได้ถูกเพิ่มชื่อ Niran เข้าไปแล้ว โดยสามารถเปิดดูได้ใน sqlitebrowser ก็ได้
เมื่อกด Run จะเห็นได้ว่า มีการแจ้งว่า "Person exist"
และเมื่อเปลี่ยนชื่อใหม่เข้าไป ก็จะมีเพิ่มเข้าไปใน database.
จอบอ.
ที่มา
https://scienceprog.com/powerful-open-source-sqlite-manager-for-raspberry-pi/
http://katecpp.github.io/sqlite-with-qt/
วันอังคารที่ 22 ธันวาคม พ.ศ. 2563
qt json
วันนี้มีโอกาสใช้ json เป็นฐานข้อมูล
ก็เหมือนเดิม อาจารย์ google ช่วยได้
ต้องออกแบบหน้าตาของ json ก่อน ว่าจะเก็บข้อมูลยังไง โดยผมกำหนดแบบนี้
ไฟล์ชื่อ test_trans.json
{
"HoseDelivery": [
{
"hose_num": 1,
"id": 1
},
{
"hose_num": 1,
"id": 5
}
]
}
เริ่มเขียน code
#include <QCoreApplication>
#include <QJsonObject>
#include <QJsonDocument>
#include <QJsonArray>
#include <QFile>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString val;
QFile file;
//========================== read json file =====================
file.setFileName("/home/pi/sourcecode/test_json/test_trans.json");
file.open(QIODevice::ReadOnly | QIODevice::Text);
val = file.readAll();
file.close();
QJsonDocument d = QJsonDocument::fromJson(val.toUtf8());
QJsonObject sett2 = d.object();
qDebug() << sett2;
QJsonArray value = sett2["hose_delivery"].toArray(); // get data in hose_delivery
qDebug() << value;
QJsonObject item = value[1].toObject(); // make QJsonValue to Object
qDebug() << item;
QJsonValue text1 = item.value(QString("money"));
qDebug() << text1;
qDebug() << QString::number(text1.toDouble());
//============================ write json file ============================
file.setFileName("/home/pi/sourcecode/test_json/test_trans2.json");
file.open(QIODevice::ReadWrite | QIODevice::Text);
val = file.readAll();
QJsonDocument doc = QJsonDocument::fromJson(val.toUtf8());
QJsonObject abc = doc.object();
qDebug() << abc;
QJsonArray valuez = abc["HoseDelivery"].toArray(); // get data in hose_delivery
qDebug() << valuez;
QJsonObject hose_delivery;
hose_delivery.insert("id",5);
hose_delivery.insert("hose_num",1);
valuez.append(hose_delivery);
qDebug() << valuez;
abc.insert("HoseDelivery",valuez);
file.resize(0);
file.write(QJsonDocument(abc).toJson(QJsonDocument::Indented));
file.close(); // Close file
return a.exec();
}
ที่มา
https://www.programmersought.com/article/2411597093/
วันอาทิตย์ที่ 20 ธันวาคม พ.ศ. 2563
Arduino VSCode
วันนี้ลองใช้ Visual Studio Code (VSCode) ในการใช้งานกับ Arduino
ใช้งานครั้งแรกจะงงหน่อย จะสร้างโปรเจคยังไง เปิดไฟล์ยังไง เปิดไม่ถูก ต้องดูใน you tube ก่อน
เริ่มกันเลยดีกว่า
เมื่อเปิด vscode ขึ้นมาแล้ว ต้องลง extension arduino ก่อน
พอลงเสร็จ ก็จะสามารถใช้งาน arduino ได้
เริ่มต้นด้วยการคลิกไปที่ file, open folder, เลือก folder ที่เราต้องการเก็บ project ของเรา เราสามารถสร้างใหม่ได้
เมื่อเลือก folder เสร็จแล้ว ให้ทำการคลิก New file
แล้วก็ตั้งชื่อไฟล์ โดยให้นามสกุลเป็น .ino เพื่อให้ vscode รู้ว่าเรากำลังจะทำ Arduino
ให้เราเสียบสาย usb จากคอมพิวเตอร์ของเรา กับบอร์ด Arduino
จากนั้นก็เลือก Board type
เลือก Serial port
เริ่มเขียน code ได้
เมื่อเขียน code เสร็จแล้ว ให้กด Verify
แล้ว Verify ผ่าน ก็กด Upload
ถ้าเราต้องการ Debug ผ่าน Serial port ให้กดปุ่มนี้
แล้วก็เลือก Baud rate ให้ถูกต้องตามที่เราเขียนโปรแกรมเอาไว้
จอบอ.ที่มา
https://www.youtube.com/watch?v=3vV_53Os9FU























