วันเสาร์ที่ 23 พฤศจิกายน พ.ศ. 2562

วัดอุณหภูมิ ในตัว rpi4

 พอดีว่าเพิ่งได้ทดสอบใช้งาน rpi4 และเห็นว่าร้อนมาก
 จึงได้ลองทำการวัดอุณหภูมิภายในของ rpi พบว่ามีมากกว่า 80 องศา
เมื่ออุณภูมิของ rpi มากกว่า 80 องศา ตัว cpu จะลดความเร็วลง เพื่อที่จะลดอุณภูมิ ทำให้ประสิทธิภาพการทำงานลดลงไปด้วย

โดยใช้วิธีวัดอุณภูมิดังนี้
/opt/vc/bin/vcgencmd measure_temp

และถ้าต้องการอ่านอุณหภูมิอย่างต่อเนื่อง ทำดังนี้
nano monitor-temp.py

แล้วเขียน code ลงไปดังนี้

import os
import time
def measure_temp():
   temp = os.popen("vcgencmd measure_temp").readline()
   return (temp.replace("temp=",""))
while True:
    print(measure_temp())
    time.sleep(1)

กด ctrl+x แล้วกด y

จากนั้น
python monitor-temp.py

เราก็จะเห็นอุณหภูมิของ rpi ออกมาเรื่อยๆ
จากการทดสอบ ping และรัน python ทิ้งไว้ พบว่า
rpi จะมีอุณหภูมิอยู่ที่ประมาณ 85-86 องศา
ระยะเวลาในการตอบ ping ประมาณ 3-4 ms บางทีก็หลุดไป 18ms, 59ms และจะมีบางจังหวะที่ Time out ก็มี

สรุปว่า rpi4 จะมีอุณหภูมิสูงสุดประมาณ 85-86 องศา และประสิทธิภาพในการทำงานจะลดลง ควรจะต้องมี heat sink หรือ พัดลม ช่วยลดอุณหภูมิ



เพิ่มเติม

พอดีว่าผมได้ใส่พัดลมเพิ่ม และ ต้องการไม่ให้พัดลมทำงานตลอด 24 ชม. จึงได้ใช้ GPIO ควบคุมพัดลมอีกที
โดยใช้ Hardware ดังรูปนี้

โดยที่ P8 ใช้ต่อเข้ากับพัดลมขั้ว + และ -
ใช้ GPIO26 (ขา 37) เป็นตัวควบคุมการ เปิด/ปิด พัดลม


ก่อนที่จะเขียน software ควบคุมพัดลม ต้องติดตั้ง python เสียก่อน ตามนี้
และเขียน software ควบคุมพัดลม ดังนี้

nano monitor-temp.py

#! /usr/bin/python

import os
import time
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BOARD)
GPIO.setup(37,GPIO.OUT)
GPIO.setwarnings(False)

def measure_temp():
        temp = os.popen("vcgencmd measure_temp").readline()
        return (temp.replace("temp=",""))

while True:
        x = measure_temp().split("'")
        print x[0]
        if float(x[0]) > 50:
          GPIO.output(37,True)
        else:
          GPIO.output(37,False)
        time.sleep(1)

control + o , enter, control +x

sudo chmod +x monitor-temp.py
เพื่อให้โปรแกรมสามารถ execute ได้

หลักการทำงานของโปรแกรมนี้
ถ้าอุณหภูมิมากกว่า 50 องศา พัดลมก็จะทำงาน
ถ้าอุณหภูมิน้อยกว่า 50 องศา พัดลมจะหยุดทำงาน

และได้ทำการให้เปิดโปรแกรมตัวนี้อัตโนมัติ หลังจากการเปิดเครื่อง
โดยเข้าไปแก้ไขที่ /etc/rc.local
sudo nano /etc/rc.local

ที่บรรทัดรองสุดท้าย ก่อน exit 0 ให้เพิ่ม
cd /hom/pi/
./monitor-temp.py &


ต้องใส่ "&" ด้วย เพราะว่าต้องการให้ system สามารถไปทำโปรแกรมอื่นๆได้ด้วย ไม่ต้องมาติดตายอยู่ที่โปรแกรมตัวนี้ตัวเดียว


แถมด้วยการสั่งให้ reboot ทุกๆวันตอนเวลาตี 2
crontab -e
1, enter

ที่บรรทัดล่างสุด ให้ใส่
0 2 * * * sudo reboot

control + o, enter, control + x


ที่มา
https://medium.com/@kevalpatel2106/monitor-the-core-temperature-of-your-raspberry-pi-3ddfdf82989f

วันพฤหัสบดีที่ 21 พฤศจิกายน พ.ศ. 2562

create launcher on desktop

ถ้าเราต้องการให้มี short cut ในการเรียกใช้โปรแกรม อยู่บน Desktop (เรียกว่า Create Launcher) เราสามารถทำได้หลายวิธี
แต่ในที่นี้จะใช้โปรแกรมที่ชื่อว่า Arronax
วิธีทำก็คือ

sudo add-apt-repository ppa:diesch/testing 
sudo apt-get update
sudo apt-get install arronax
nautilus -q

หลังจากทำเสร็จแล้ว ก็ให้เราไปหาไฟล์ที่เราต้องการทำ launcher แล้วคลิกขวาจะเห็นคำว่า
"Create starter for this program"

เราจะเห็นโปรแกรม Arronax ขึ้นมา
ถ้าเราต้องการเปลี่ยนรูป ก็ให้คลิกในวงกลมส้ม และ เลือกรูปที่ต้องการ


แล้วก็คลิกที่ปุ่ม save
เป็นอันเสร็จพิธี




https://askubuntu.com/questions/64222/how-can-i-create-launchers-on-my-desktop

วันศุกร์ที่ 15 พฤศจิกายน พ.ศ. 2562

ใช้ Qt สั่ง print เข้า printer โดยตรง ทั้งแบบ Auto และแบบให้เลือก printer


#include <QApplication>
#include <QPrinter>
#include <QPrintDialog>
#include <QPainter>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QString text ="Test print";

    QPrinter printer;

    QPrintDialog *dialog = new QPrintDialog(&printer);
    dialog->setWindowTitle("Print Document");

    if (dialog->exec() != QDialog::Accepted)
        return -1;

    QPainter painter;
    painter.begin(&printer);

    painter.drawText(100, 100, 500, 500, Qt::AlignLeft|Qt::AlignTop, text);

    painter.end();

    return 0;
}

https://stackoverflow.com/questions/11397683/how-to-print-text-file-to-printer-in-qt

===========================================================
ถ้าต้องการให้ print ทันที ก็ให้ตัด code ในส่วนที่เป็น dialog ออกไป
#include <QApplication>
#include <QPrinter>
#include <QPainter>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QString text ="Test print";

    QPrinter printer;

    QPainter painter;
    painter.begin(&printer);

    painter.drawText(100, 100, 500, 500, Qt::AlignLeft|Qt::AlignTop, text);

    painter.end();

    return 0;
}

==============================================================
ลง driver printer hp ตามนี้
https://www.youtube.com/watch?v=va6PWYZScZk

วันพุธที่ 13 พฤศจิกายน พ.ศ. 2562

ติดตั้ง node red บน windows

1.เริ่มจาก download จากที่นี่ https://nodejs.org/en/
ให้เลือกตัวที่ลงท้ายด้วย LTS ย่อมาจาก Long Term Support
2.เมื่อลงโปรแกรมเสร็จแล้ว ทดสอบดังนี้
เปิด command prompt แล้วพิมพ์ node --version ควรจะมี version โผล่ขึ้นมา
พิมพ์ npm --version ก็ควรจะมีเลข version โผล่ขึ้นมาเหมือนกัน
3.install Node Red ด้วยการพิมพ์ใน command prompt ดังนี้
npm install -g --unsafe-perm node-red แล้วรอสักพัก
4.สั่งเปิดโปรแกรมด้วยการพิมพ์ node-red ใน command prompt
5.เมื่อ node red จะทำงานอยู่ที่ port 1880 ให้เปิด Browser แล้วใส่หมายเลข IP ของคุณตามด้วยหมายเลข port 1880 ยกตัวอย่าง เช่น 192.168.1.11:1880
แค่นี้ก็ใช้งาน node red ได้แล้ว
ถ้าต้องการให้ auto start ทุกครั้งที่เปิดเครื่อง ให้ทำดังนี้

6. npm install -g pm2
7. เช็คการทำงานด้วย pm2 status
8. สั่ง start node red ด้วยคำสั่ง pm2 start C:\Users\<User>\AppData\Roaming\npm\node_modules\node-red\red.js
9. npm install pm2-windows-startup -g
10. pm2-startup install
11. pm2 save

#Deaware
https://medium.com/@suthipongbubpago/auto-startup-node-red-with-pm2-on-windows-f050f0232d07

วันอังคารที่ 12 พฤศจิกายน พ.ศ. 2562

rpi3b เลิกผลิต จึงต้องทำใหม่ทั้งหมดด้วย rpi4


1.เริ่มต้นด้วย download image lite มาจาก https://www.raspberrypi.org/downloads/raspbian/ โดยเลือกตัว buster lite
2.sudo nano /etc/default/keyboard ให้เปลี่ยนจาก "gb" ไปเป็น "us"  เพื่อทำให้ keyboard เป็น us
2.1 reboot
3.sudo raspi-conig
3.1 change password
3.2 change Time-Zone ให้เป็น Asia, Bangkok
3.3 Interface option
3.3.1 Enable I2C
3.3.2 Enable SSH
4.sudo nano /boot/config.txt
4.1 uncomment hdmi_force_hotplug=1
4.2 uncomment hdmi_group=1, hdmi_mode=16
แล้วแต่กรณีดังตารางต่อไปนี้


hdmi_group hdmi_mode ความละเอียด จอ
1 16 1080p TV
2 16 1024x768 60hz computer
2 82 1080p 60hz computer


5.Static IP
5.1 sudo nano /boot/cmdline.txt เพิ่ม ip=192.168.1.31 เพื่อตั้ง ip
5.2 sudo systemctl disable dhcpcd.service เพื่อไม่ให้รับ ip dhcp
6.sudo apt-get update
7.sudo apt-get upgrade
8.sudo apt-get install wiringpi
9.cd /temp
10.wget https://project-downloads.drogon.net/wiringpi-latest.deb
11.sudo dpkg -i wiringpi-latest.deb
12.check ด้วยคำสั่ง gpio -v และ gpio readall
13.ลง R502-CL
13.1 Open a root terminal window; you need to have administrator rights.
Get and install the libusb library with the apt-get command: apt-get install libusb-dev libusb++-0.1-4c2
Check the installation: You shall find the library libusb.so under the directory /usr/lib/
13.2. Download and install the libccid package: apt-get install libccid
13.3. Download and install the pcsc-lite package: apt-get install pcscd
13.4. Check that the pcscd service is running:
In the terminal console, run the command ps –A.
You should find a "pcscd" process running in the list displayed
Run pcscd in terminal
13.5. Download and install libpcsclite1: apt-get install libpcsclite1
13.6. Download and install libpcsclite-dev: apt-get install libpcsclite-dev
13.7. Check whether the R502 reader is detected: your_system_name:/tmp# lsusb
Bus 001 Device 002: ID 096e:0608
13.8. Use root to run “install script”: $ wget http://download.ftsafe.com/files/reader/product/R502/install.sh $ sh install.sh or $ bash install.sh
13.9. After run “install script”, then insert reader and start “pcscd” service.
Run “pcsctest” command to do test
Like below: pcscd –adf //run pcscd service, for parameter, you can using “man pcscd” to get more helps pcsctest
13.10. To develop application based on FEITIAN R502, check below:
To develop your own application, just follow PCSC Lite APIs
http://pcsclite.alioth.debian.org/api/group__API.html
For the test demo application, you can found in source code, which named "pcsctest"
https://alioth.debian.org/frs/?group_id=30105


http://wiringpi.com/download-and-install/
https://www.raspberrypi.org/forums/viewtopic.php?t=251297
http://wiringpi.com/wiringpi-updated-to-2-52-for-the-raspberry-pi-4b/
http://androidraspberryarduino.blogspot.com/2015/12/install-acr-pcsc-smart-card-raspberry.html
https://hosxp.net/smf2/index.php?topic=35175.0
https://raspberrypith.blogspot.com/2014/09/install-card-reader-rfid-r502-cl.html
https://github.com/FeitianSmartcardReader/R502_SDK_Latest/blob/master/Docs/EN_Build_CCID_Driver_On_Linux_Latest.pdf


วันอังคารที่ 5 พฤศจิกายน พ.ศ. 2562

การใช้งาน node red กับ gpio บน raspberry pi

ให้เราเปิด browser ขึ้นมาก่อน แล้วเข้าไปที่ ip-rpi:1880 เพื่อที่จะเข้าที่หน้า node red ก่อน
ถ้าต้องการใช้ node red ควบคุม gpio ต้อง install palette node-red-node-pi-gpio ก่อน



จากนั้น ที่ด้านซ้ายมือ เราจะเห็น node raspberry pi ขึ้นมา
ทีนี้เราก็จะสามารถควบคุม gpio ผ่าน node red ได้แล้ว

สมมติว่าถ้าเราต้องการควบคุม LED ที่ต่ออยู่กับ pin 35 โดยที่เราต่อวงจรไว้ตามนี้

ก็ให้เราลาก rpi gpio out จาก node ทางด้านซ้าย ออกมาไว้ตรงกลาง
แล้วก็ double click เข้าไป จะเห็นว่ามีรูป pin ต่างๆของ raspberry pi โชว์ขึ้นมา ก็ให้เราคลิกเลือก pin35 และกำหนดให้เป็น digital output

 ให้เราลง node dashboard เพื่อที่ใช้งานพวก switch, slide switch หรืออื่นๆได้
โดยพิมพ์ใน terminal ดังนี้
npm install node-red-dashboard
จากนั้นเราจะเห็น node dash board ขึ้นมาทางด้านซ้ายมือ ให้เราเลือก switch ลงมา แล้ว double click เข้าไป
ตรง group ให้สร้าง group ใหม่ขึ้นมา โดย click ที่รูปดินสอ
ตรง Name ให้กำหนดเป็นชื่ออะไรก็ได้ ในที่นี้คือ Green
ตรง Tap ให้กำหนดเป็น Home
On payload ให้เลือกเป็น number แล้วใส่เลข 1
Off payload ให้เลือกเป็น number แล้วใส่เลข 0
แล้วก็ลากเส้นเชื่อมกันระหว่าง switch กับ gpio
จากนั้นให้เข้า browser ip-rpi/1880/ui
จะเห็น dashboard ที่มี switch 1 อัน ที่จะเอาไว้ควบคุม LED ที่เราต่อไว้
แต่ในรูปเห็น 2 อัน เพราะผมทำไว้ 2 อันนะครับ ไม่ต้องแปลกใจว่าทำไมไม่เหมือนกัน
ลองกดที่ switch ดูนะครับ ควรที่จะควบคุม LED ได้แล้ว

(ที่มา DEAWARE, https://www.youtube.com/watch?v=RA06ee3jahM)