วันศุกร์ที่ 11 ตุลาคม พ.ศ. 2562

ลง mysql ใน rpi

ให้ทำตามด้านล่าง ใต้คำว่า "จบ" ก่อน แล้วค่อยมาทำตรงนี้ต่อ แต่ว่ามันจะมั่วๆหน่อย โชคดีผีกัดหัว

 sudo mysql -u root -p
ให้ใส่ password = อะไรก็ได้ แต่จำให้ได้ล่ะ

GRANT ALL PRIVILEGES ON *.* TO pi@localhost IDENTIFIED BY 'อะไรก็ได้ แต่จำให้ได้ล่ะ'

ตอนนี้เราจะสามารถเข้า mysql ได้ ด้วยคำสั่งนี้
mysql -u pi -p
แล้วก็ใส่ password ไป

create database test_db;
use test_db;
create table gpio_input ( id int, part_number varchar(20), date_time varchar(20), rpi_name varchar(20), primary key (id) );
show tables;
create table rpi_name ( id int, name varchar(20), primary key (id) );

insert into gpio_input (id, part_number, date_time, rpi_name) values (1, "000001" , "10/09/2019", "rpi1");
\quit;

************ เขียน qt ติดต่อ mysql ภายในตัวเอง ************************
ดูตามนี้
https://www.youtube.com/watch?v=yxy0yvZnX1Y
แต่เจอปัญหา  qsqldatabase: qmysql driver not load แก้ได้ด้วยติดตั้งคำสั่งนี้
sudo apt-get install libqt5sql5-mysql

จบ
================================================================

ที่อยู่ด้านล่างหลังจากนี้ คือที่ทำไว้ก่อนหน้านี้ แต่ไม่สำเร็จ แต่ก็ไม่อยากลบ

มือใหม่หัดเล่น database ครับ เขามีไรสอนบนเวป ก็เอาอันนั้นล่ะ ก็เลยเลือก mysql มาเป็นฐานข้อมูล

เริ่มจาก

sudo apt-get install  mysql-server
ระหว่างลงโปรแกรม จะเจอคำถามให้ใส่ password ก็ใส่ๆไป

ถ้าอยากแก้ไขรหัสผ่าน
sudo mysqladmin -u root password 'newpass'


ถ้าต้องการตรวจสอบว่าฐานข้อมูลเปิดอยู่รึเปล่า ให้ใช้คำสั่งต่อไปนี้
sudo netstat -tap | grep mysql 

ถ้าโปรแกรม mysql เปิดอยู่ ควรจะเห็นอะไรคล้ายๆนี้
tcp        0      0 localhost:mysql         *:*                LISTEN      2556/mysqld

แต่ถ้า mysql ไม่ start อยู่ ให้ใช้คำสั่งต่อไปนี้
sudo service mysql restart

ตั้งค่า configure เบื้องต้น
ให้เราเข้าไปที่ /etc/mysql/my.cnf ถ้าเราต้องการให้ฐานข้อมูลสามารถอ่านจาก network ได้ ให้เข้าไปแก้ bind-address
bind-address = 192.168.1.10

หรือถ้าไม่มีอยู่ใน my.cnf ก็ให้เข้ามาดูในนี้แทน
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
แล้วแก้ไขจาก
bind-address =  127.0.0.1 ให้เป็น
bind-address = 0.0.0.0
**** ใช้ _ แทน - ****
เสร็จแล้ว  ให้ทำตามนี้ เพื่อให้เครื่องอื่น(ตามที่ระบุ) สามารถเข้ามาใช้งาน database ได้

Grant access to a database user

  1. Log in to the database server.
  2. Connect to the MySQL database as the root user.
  3. Enter the following command:
    GRANT ALL ON <local database name>.* TO <remote web node username>@<remote web node server ip address> IDENTIFIED BY '<database user password>';
    
For example,
GRANT ALL ON RTKS_database.* TO rtks@192.168.1.108 IDENTIFIED BY 'password';

ip 192.168.1.108 = remote machine
ip 192.168.1.110 = server machine

Verify database access

On your remote machine, enter the following command to verify the connection works:
mysql -u <local database username> -h <database server ip address> -p
For example,
mysql -u rtks -h 192.168.1.110 -p

แล้วก็ใส่ password ตามที่ตั้งไว้

 
https://devdocs.magento.com/guides/v2.3/install-gde/prereq/mysql_remote.html

หลังจากแก้ไข my.cnf ให้ restart service ดังนี้
sudo service mysql restart

 เข้าใช้งาน mysql ครั้งแรก
mysql -u root -p
หมายถึง user root no password
จะเห็น version 5.6.25

พิมพ์ exit เพื่อออก

แต่ถ้าในกรณีที่เราเข้า mysql -u root -p แล้วขึ้นว่า
mysqladmin: connect to server at 'localhost' failed error:
'Access denied for user 'root'@'localhost' (using password: YES)'
ให้ทำดังนี้
  1. Open & Edit sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
  2. Add skip-grant-tables under [mysqld]
  3. Restart Mysql, sudo /etc/init.d/mysql stop, sudo /etc/init.d/mysql start
  4. You should be able to login to mysql now using the below command mysql -u root -p
  5. use mysql;
    update user set authentication_string=PASSWORD("") where User='root';
    update user set plugin="mysql_native_password" where User='root';  # THIS LINE
    
    flush privileges;
    quit;
  6. Go back to /etc/mysql/mysql.conf.d/mysqld.cnf and remove/comment skip-grant-tables
  7. Restart Mysql, sudo /etc/init.d/mysql stop, sudo /etc/init.d/mysql start
  8. Now you will be able to login with the new password mysql -u root -p
 ที่มา
https://stackoverflow.com/questions/41645309/mysql-error-access-denied-for-user-rootlocalhost
และ
https://stackoverflow.com/questions/37879448/mysql-fails-on-mysql-error-1524-hy000-plugin-auth-socket-is-not-loaded


แต่ถ้าไม่ถนัดในการใช้ terminal ก็มีทางเลือกคือ
ให้เข้า software center แล้วลง mysql workbench
เมื่อลงเสร็จแล้ว คลิกที่หน้าแรก ก็จะเข้าไปเจอหน้า local instance
ลองสร้าง database ใหม่ ชื่อ test, utf8-default collation กด apply
ก็จะมี database ก้อนใหม่ให้เห็นที่ด้านล่างซ้ายมือ
ให้คลิกขวาที่ database แล้วเลือกเป็น set as default schema
create new table ที่เมนูด้านบน
ก็จะให้สร้าง table ใหม่ ก็ใส่ชื่อลงไป
คลิกที่ด้านล่าง column name ก็ใส่ชื่อ column ลงไป กำหนดให้เป็น type อย่างที่ต้องการ
ถ้าต้องการใส่ข้อมูล ให้คลิกขวาที่ table(เมนูด้านซ้าย) แล้วเลือก select rows
ลองเล่นกันดูแล้วกัน คร่าวๆแค่นี้

และเมื่อเราจะเริ่ม project qt ให้เราเพิ่มใน .pro ด้วย sql
เช่น QT += sql


แต่ลงไปลงมา เขียนโค้ด ใช้ไม่ได้ เลยไปลง sqlite3 แทนดีกว่า




 ที่มา : https://help.ubuntu.com/12.04/serverguide/mysql.html

เขียน qt ติดต่อ database เครื่อง server

ใน .h
QSqlDatabase ServerDatabase;


ใน .cpp
เราต้องรู้ก่อนว่า user name และ password บนเครื่อง server คืออะไร
รวมถึง port ที่เครื่อง server กำหนดให้เข้าถึงได้
ServerDatabase = SqlDatabase::addDatabase("QMYSQL","ServerDB);
ServerDatabase.setHostName("192.168.1.xx"); //server's ip
ServerDatabase.setDatabaseName("dotdot");
ServerDatabase.setPort(3306);
ServerDatabas.setUserName("root");
ServerDatabase.setPassword("micky_mouse");
if(!ServerDatabase.open()){
qDebug() << ServerDatabase.lastError().text();
}

วิธีลง qt ใน rpi

************ ลง qt
ให้เพิ่ม compiller gcc และ g++ ซึ่งไม่มีบอกในเวป
เปิดใช้งาน qtcreator ก็พิมพ์ใน terminal เลย qtcreator

วันอาทิตย์ที่ 29 กันยายน พ.ศ. 2562

ทำให้ rpi สามารถเข้าถึง database ของเครื่อง server ได้

************ ทำให้ rpi สามารถเข้าถึง database ของเครื่อง server ได้
ลง mysql server ที่เครื่อง windows จาก https://www.youtube.com/watch?v=e94sZLykWa8
กำหนด password ให้ root แล้วจดไว้
ลง mysql workbench
สร้าง database ชื่อว่า Test1
ทำให้เครื่องอื่นสามารถเข้ามาใช้ database เครื่องแม่ได้ ทำดังนี้
เปิด mysql workbench แล้วไปที่ user and privileges
 



กดปุ่ม Add account,
ระบุ Login name = root, 
Limit to host matching = %, คือการให้ IP ใดๆเข้ามาก็ได้ ถ้าเราจะระบุแค่ IP เดียวก็ได้เช่นกัน
ระบุ password
confirm password
แล้วกด Apply
ต้องกำหนดสิทธิ์ให้เครื่องที่จะ remote เข้ามา โดยคลิกที่แทป Administrative Roles แล้วก็ติ๊กเครื่องหมายถูกให้ขึ้นทุกช่อง เพื่อให้เครื่องลูกทำได้ทุกอย่าง
 


ทดสอบจากเครื่องลูก (rpi)
mysql -u root -h ipเครื่องแม่ -p ตัวอย่างเช่น mysql -u root -h 192.168.1.11 -p
แล้วก็ใส่ password
แค่นี้ก็ access database เครื่องแม่ได้แล้ว

วันเสาร์ที่ 1 มิถุนายน พ.ศ. 2562

ลงใหม่หมด

เริ่มตั้งแต่เครื่องเพิ่งลง ubuntu 18.04 เสร็จใหม่ๆเลย ยังไม่ได้ลงอะไรทั้งสิ้น
download QT จาก link นี้
download.qt.io/official_releases/qt/5.12/5.12.3/qt-opensource-linux-x64-5.12.3.run
chmod +x qt-opensource-linux-x64-5.7.0.run
./qt-opensource-linux-x64-5.7.0.run
sudo apt-get install build-essential 
sudo apt-get install libfontconfig1
sudo apt-get install mesa-common-dev
sudo apt-get install libglu1-mesa-dev -y  
แล้วก็ลง mysql
https://qt-thailand.blogspot.com/2019/10/mysql-rpi.html หรือ
https://support.rackspace.com/how-to/installing-mysql-server-on-ubuntu/
sudo apt-get install libqt5sql5-mysql  

เมื่อลง mysql เสร็จแล้ว และเปิดโปรแกรม qt ขึ้นมา
เมื่อเราเขียน code และ compile แล้ว ทดลองรันดู จะพบ errorประมาณนี้
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 
ให้แก้ไขโดยทำตามนี้
ให้เข้าไปที่โฟลเดอร์ที่เราลงโปรแกรม qt ไว้
cd /opt/Qt5.2.1/5.2.1/gcc_64/plugins/sqldrivers 
แล้วพิมพ์
ldd libqsqlmysql.so
เราจะเห็น
libmysqlclient.so.18 => not found
ให้ไปที่นี่
https://launchpad.net/ubuntu/xenial/amd64/libmysqlclient18/5.6.25-0ubuntu1
แล้ว download ตัวนี้มา
libmysqlclient18_5.6.25-0ubuntu1_amd64.deb
เมื่อได้ไฟล์มาแล้ว ให้ใช้คำสั่ง
sudo dpkg -i libmysqlclient18_5.6.25-0ubuntu1_amd64.deb

เพียงเท่านี้ เราก็จะสามารถใช้ qt กับ mysql ได้แล้ว

แต่ถ้าเราเขียน code แล้ว compile แล้ว พบ error ที่ไม่มี QMYSQL เช่น
QSqlDatabase: available drivers: QSQLITE
ให้ทำดังนี้
cd Qt5.13.1/5.13.1/Src/qtbase/src/plugins/sqldrivers แล้วพิมพ์
../../../../../gcc_64/bin/qmake sqldrivers.pro ถ้า error ลองอ่านที่มันฟ้องขึ้นมา ในที่นี้ฟ้องว่า ให้ลองติดตั้ง qtchooser
sudo apt-get qtchooser
แล้วก็
../../../../../gcc_64/bin/qmake sqldrivers.pro เมื่อเสร็จแล้วก็ตามด้วย
make install 
ที่มา
https://forum.qt.io/topic/80882/error-while-compiling-qt-mysql-driver/20 
 
ที่มา
https://wiki.qt.io/Install_Qt_5_on_Ubuntu 
https://stackoverflow.com/questions/14667768/qmysql-driver-available-but-not-loaded
https://stackoverflow.com/questions/37369480/qsqldatabase-qmysql-driver-not-loaded-on-ubuntu-15-04-64bits

ลงใหม่หมด

เริ่มตั้งแต่เครื่องเพิ่งลง ubuntu 18.04 เสร็จใหม่ๆเลย ยังไม่ได้ลงอะไรทั้งสิ้น
download QT จาก link นี้
download.qt.io/official_releases/qt/5.12/5.12.3/qt-opensource-linux-x64-5.12.3.run
chmod +x qt-opensource-linux-x64-5.7.0.run
./qt-opensource-linux-x64-5.7.0.run
sudo apt-get install build-essential 
sudo apt-get install libfontconfig1
sudo apt-get install mesa-common-dev
sudo apt-get install libglu1-mesa-dev -y  
แล้วก็ลง mysql
https://support.rackspace.com/how-to/installing-mysql-server-on-ubuntu/
sudo apt-get install libqt5sql5-mysql  

เมื่อลง mysql เสร็จแล้ว และเปิดโปรแกรม qt ขึ้นมา
เมื่อเราเขียน code และ compile แล้ว ทดลองรันดู จะพบ errorประมาณนี้
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 
ให้แก้ไขโดยทำตามนี้
ให้เข้าไปที่โฟลเดอร์ที่เราลงโปรแกรม qt ไว้
cd /opt/Qt5.2.1/5.2.1/gcc_64/plugins/sqldrivers 
แล้วพิมพ์
ldd libqsqlmysql.so
เราจะเห็น
libmysqlclient.so.18 => not found
ให้ไปที่นี่
https://launchpad.net/ubuntu/xenial/amd64/libmysqlclient18/5.6.25-0ubuntu1
แล้ว download ตัวนี้มา
libmysqlclient18_5.6.25-0ubuntu1_amd64.deb
เมื่อได้ไฟล์มาแล้ว ให้ใช้คำสั่ง
sudo dpkg -i libmysqlclient18_5.6.25-0ubuntu1_amd64.deb

เพียงเท่านี้ เราก็จะสามารถใช้ qt กับ mysql ได้แล้ว

แต่ถ้าเราเขียน code แล้ว compile แล้ว พบ error ที่ไม่มี QMYSQL เช่น
QSqlDatabase: available drivers: QSQLITE
ให้ทำดังนี้
cd Qt5.13.1/5.13.1/Src/qtbase/src/plugins/sqldrivers แล้วพิมพ์
../../../../../gcc_64/bin/qmake sqldrivers.pro ถ้า error ลองอ่านที่มันฟ้องขึ้นมา ในที่นี้ฟ้องว่า ให้ลองติดตั้ง qtchooser
sudo apt-get qtchooser
แล้วก็
../../../../../gcc_64/bin/qmake sqldrivers.pro เมื่อเสร็จแล้วก็ตามด้วย
make install 
ที่มา
https://forum.qt.io/topic/80882/error-while-compiling-qt-mysql-driver/20 
 
ที่มา
https://wiki.qt.io/Install_Qt_5_on_Ubuntu 
https://stackoverflow.com/questions/14667768/qmysql-driver-available-but-not-loaded
https://stackoverflow.com/questions/37369480/qsqldatabase-qmysql-driver-not-loaded-on-ubuntu-15-04-64bits

วันอาทิตย์ที่ 24 กันยายน พ.ศ. 2560

code ตัวอย่าง qt print document

#include <QPainter>
#include <QPrinter>

.
.
.

//======= save as pdf file ==============//
    QPrinter printer;
    printer.setOutputFormat(QPrinter::PdfFormat);
    printer.setOutputFileName("/your/directory/your/file.pdf");
    QPainter painter;
    if(!painter.begin(&printer))    // fail to open file
    {
        qWarning("fail to open file.");
        return ;
    }
    painter.drawText(320,80,"your text1");
    painter.drawText(100,110,"your text2");
    painter.drawText(100,140,"your text3");

    //======== drawing next page ==========//
    /*if(!printer.newPage())
    {
        qWarning("fail in flushing page to disk.");
        return;
    }
    painter.drawText(10,10,"Test 2");*/
    //==============================//

    painter.end();

ที่มา
https://www.youtube.com/watch?v=lA5D8b_QPxo