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.1
control+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
#fi
ctrl+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