วันอาทิตย์ที่ 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