728x90

센서값을 수집해서 실시간으로 실행창에서 최신화하고 갱신하는 방법에 대해 소개해 드리겠습니다.

 

먼저 QThread를 상속받는 클래스를 하나 만들어 줍니다.

생성된 qTh.h 파일에 소스코드를 아래와 같이 써줍니다.

#ifndef QTH_H
#define QTH_H

#include <QThread>

class qTh : public QThread
{
    Q_OBJECT
public:
    explicit qTh(QObject* parent = 0);
private:
    void run();				// QThread 실행
signals:
    void setValue(int tmp);
};

#endif // QTH_H

qTh.cpp 파일도 아래와 같이 써줍니다.

signal에 setValue라는 함수를 만들어 줬습니다. setValue의 사용은 아래 ui의 cpp 파일의 connect 함수에서 사용합니다.

#include "qth.h"

qTh::qTh(QObject *parent) : QThread(parent)
{

}
void qTh::run()
{
    while(1)
    {
        int tmp = function();
        emit setValue(tmp);
        sleep(1);
    }
}

run() 함수의 while(1)안에 센서값을 받아오고 받아온 센서값을 emit setValue()를 통해 Ui로 전달해 줍니다.

 

그리고 기존에 있던 Ui 파일(저는 dialog.h / dialog.cpp)에 아래처럼 수정해줍니다.

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include "qth.h"

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = nullptr);
    ~Dialog();
private slots:
    void showValue(int tmp);

private:
    Ui::Dialog *ui;
    qTh* qthread;
};

#endif // DIALOG_H

여기선 slots에 showValue라는 함수로 이름을 지었습니다. 

 

이제 마지막으로 cpp 파일을 수정하면

#include "dialog.h"
#include "ui_dialog.h"
#include "qth.h"

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    qthread = new qTh(this);
    connect(qthread, SIGNAL(setValue(int)), this, SLOT(showValue(int)));
    qthread->start();
}
void Dialog::showValue(int tmp)
{
    ui->tempValue->setText(QString::number(temp));
    ui->tempValue->setAlignment(Qt::AlignCenter);
}
Dialog::~Dialog()
{
    delete ui;
}

connect 함수를 이용해 setValue 함수와 showValue 함수를 연결해 setValue에서 넘어온 값을 showValue를 통해 ui의 label의 text를 수정해 주는 파일입니다.

 

저기서 setAlignment 함수는 text를 정렬해주는 함수이고 Qt::AlignCenter로 가운데 정렬을 해주었습니다.

 

아래 실행화면은 제가 위 함수에서 항목 몇가지를 추가하여 사용하고 있는 화면입니다.

온습도 미세먼지 센서 값을 수집해서 실시간으로 최신화 되고 있습니다.

자세한 코드는 아래 링크에서 확인하실 수 있습니다.

https://github.com/psy1064/DJU_OSP/tree/master/Raspberry

 

psy1064/DJU_OSP

대전대학교 오픈소스프로젝트. Contribute to psy1064/DJU_OSP development by creating an account on GitHub.

github.com

 

 

728x90

'Programming > Qt' 카테고리의 다른 글

Qt 클릭 이벤트 만들기  (0) 2020.04.10
Qt 데이터베이스(maria db) 연동해서 사용하기  (0) 2020.03.13
Qt Tcp 소켓통신하기(서버)  (0) 2019.11.20
Qt QLabel에 사진 넣기  (0) 2019.11.07
Qt 라이브러리 추가하기  (0) 2019.10.11
728x90

라즈베리파이에서 wiringPi를 사용하기 위해서는 컴파일 시 -lwiringPi옵션을 붙여야 사용이 가능하다.

 

이 -lwiringPi옵션을 Qt creator에서 추가하는법을 알아보자.

 

진행하고 있는 프로젝트의 프로젝트파일(.pro)파일에 들어간다.

.pro 파일에서 우클릭을 눌러 Add Library를 클릭한다.

위 창이 뜨면 External library를 클릭한 후 Next를 누른다.

위 창에서 Library file의 Browse를 눌러 원하는 library 파일(.so)를 선택 후 확인을 누르면 아래 Include path도 자동으로 채워진다. wiringPi를 사용하기 위해 wiringPi library를 추가해보자. 

wiringPi의 경로는 /usr/lib/libwiringPi.so이다.

라이브러리를 추가 후 Ctrl + B로 빌드 후 Ctrl + R로 실행하면 정상적으로 작동하는 것을 확인할 수 있다.

 

원하는 라이브러리 파일을 찾고 싶을땐 터미널에서 sudo find / -name "libwiringPi.so" -print를 입력하면 위치를 알 수 있다.

728x90
728x90

안드로이드 스튜디오에서 색에 투명도를 넣기 위해서는 16진수의 색 코드 앞에 2자리의 16진수를 넣으면 된다.

 

android:background="#FF000000"

android:background="#50000000"

 

android:background="#00000000"

투명도 퍼센트

  • 100% - FF
  • 95% - F2
  • 90% - E6
  • 85% - D9
  • 80% - CC
  • 75% - BF
  • 70% - B3
  • 65% - A6
  • 60% - 99
  • 55% - 8C
  • 50% - 80
  • 45% - 73
  • 40% - 66
  • 35% - 59
  • 30% - 4D
  • 25% - 40
  • 20% - 33
  • 15% - 26
  • 10% - 1A
  • 5% - 0D
  • 0% - 00

 

자료 출처: https://pimi.tistory.com/5 [피미]

 

728x90
728x90

1. Fragment(프래그먼트)란?

Fragment는 FragmentActivity 내의 어떤 동작 또는 사용자 인터페이스의 일부이다. 여러개의 fragment를 하나의 액티비티에 결합하여 창이 여러 개인 UI를 빌드할 수 있다. 쉽게 말해서 하나의 액티비티에 여러 화면을 띄우고 싶을 때 사용한다.

2. Fragment의 생명 주기

Fragment 생명 주기(출처 : Android

  • onAttach() : 프래그먼트가 처음 액티비티에 붙을 때 호출되는 함수
  • onCreate() : 프래그먼트를 생성할 때 호출되는 함수
  • onCreateView() : 프래그먼트가 자신의 사용자 인터페이스를 처음 그릴 때 호출되는 함수 View를 반환
  • onActivityCreated() : Activity의 onCreate()함수가 완료되고 호출되는 함수
  • onStart() : 프래그먼트를 사용자에게 보이게 만드는 함수
  • onResume() : 프래그먼트와 사용자가 상호작용이 가능한 함수
  • onPause() : 프래그먼트와 사용자간의 더 이상 상호작용이 없을 때 호출되는 함수
  • onStop() : 프래그먼트가 더 이상 사용자에게 보여지지 않음
  • onDestroyView() : 프래그먼트의 view를 제거
  • onDestroy() : 프래그먼트를 제거 상태로 만듬
  • onDetach() : 프래그먼트 제거

 

728x90
728x90

본 포스팅은 한빛 미디어의 '이것이 MariaDB다'를 참고하여 작성하였습니다.

http://www.hanbit.co.kr/store/books/look.php?p_code=B1764282969

 

이것이 MariaDB다

이 책은 실무에서 바로 적용 가능한 다양한 실습 예제를 통해 데이터베이스 개발과 운영을 모두 체험해 볼 수 있게 구성했다. 책의 도입부에서는 ‘MariaDB 전체 운영 실습’을 미리 진행해보며 기본적인 데이터베이스 운영의 개념과 자신감을 얻을 수 있다. 이후부터는 앞서 훑어 보았던 내용을 스텝별로 상세히 실습하며 자연스럽게 실전감각을 익힌다. 특히 후반부에는 PHP 프로그래밍을 MariaDB와 연동하여 웹에서도 활용할 수 있도록 구성했다. 책의 마지막까

www.hanbit.co.kr

1. 데이터베이스 생성

HeidiSQL을 실행하고 localhost에 오른쪽 클릭 후 새로 생성 > 데이터베이스 를 클릭한다.

아래와 같이 창이 뜨면 이름에 원하는 데이터베이스 명을 입력 후 확인을 눌러준다. 

혹은 쿼리 탭에서 CREATE DATABASE `db 이름`; 을 입력 후 F9을 눌러준다.

2. 테이블 생성하기

생성한 데이터베이스에서 오른쪽 클릭 후 새로 생성 > 테이블을 클릭한다. 이름에는 테이블 이름을 넣어준다. 

그 후 아래 열 추가 버튼을 누르면 열을 생성할 수 있다.

아래 나와있는 정보들을 입력하고 기본키로 설정하고 싶은 열에 우클릭 후 새 인덱스 생성 > PRIMARY를 눌러준다. 그 후 저장버튼을 누르면 테이블을 저장할 수 있다.

3. 데이터 입력

생성한 테이블을 클릭하고 데이터 탭을 선택한다. 빈 화면에 오른쪽 클릭 후 행삽입 클릭 혹은 화면에서 Insert키를 눌러준다.

행을 삽입하게되면 열 아래 행이 하나씩 추가된다. 

행을 클릭하여 정보를 입력하고 엔터를 누르면 데이터가 입력되고 아래 결과메세지 창에서 어떤 쿼리문이 실행된건지 볼 수 있다.

 

728x90

'Programming > MariaDB' 카테고리의 다른 글

Windows MariaDB 한글 깨짐 설정  (0) 2020.03.20
Maria DB ↔ PHP ↔ Android 연동하기 - 1. XMAPP 설치  (0) 2020.03.20
MariaDB(DBMS)의 구조 및 용어  (0) 2019.08.29
MariaDB 설치 - Windows  (0) 2019.08.26
MariaDB란?  (0) 2019.08.26
728x90

1. PThread란?

POSIX Threads, PThread는 병렬적으로 작동하는 소프트웨어의 작성을 위해서 제공되는 표준 API이다. 

2. pthread_create()

pthread를 생성하기 위해서는 pthread_create()함수를 사용한다. 

#include <pthread.h>

int pthread_create(pthread_t *thread, const pthread_attr_t *attr, 
					void *(*start_routine)(void *), void *arg);
  1. thread_t : 스레드를 구분하기 위한 ID
  2. attr : 스레드를 생성할때 필요한 속성 값
  3. start_routine : 스레드로 해야할 일을 정의한 함수
  4. arg : 세번째 인자에서 사용한 start_routine 함수로 넘겨주는 값

함수의 호출이 성공하면 첫 번째 인자에 pthread_t형의 현재의 스레드에 대한 ID를 설정하고 0을 반환한다.

3. pthread_join()

스레드는 종료할때 까지 대기해야 한다. 서브 스레드가 실행되고 있는 때는 메인 스레드가 종료되지 않도록 해야하는데 이때 pthread_join() 함수를 사용한다.

#include <pthread.h>

int pthread_join(pthread_t thread, void **retval);
  1. thread : pthread_create()에서 설정된 스레드의 ID
  2. **retval : start_routine에서 반환되는 값을 받기위해 사용

4. 예제

컴파일 시 -lpthread를 추가한다.

ex) g++ -o thread thread.cpp -lpthread

#include <iostream>
#include <cstdlib>
#include <unistd.h>
#include <pthread.h>

using namespace std;

void* function_A(void* num)
{
	int i = 0;
	while (true)
	{
		cout << "funcA i = " << i << endl;
		i++;
		sleep(1);
	}
}
void* function_B(void* num)
{
	int i = 0;
	while (true)
	{
		cout << "funcB i = " << i << endl;
		i++;
		sleep(2);
	}
}
int main()
{
	pthread_t ptA, ptB;

	cout << "create Thread A" << endl;
	pthread_create(&ptA, NULL, function_A, NULL);
	cout << "create Thread B" << endl;
	pthread_create(&ptB, NULL, function_B, NULL);

	pthread_join(ptA, NULL);
	pthread_join(ptB, NULL);

	return 0;
}

728x90
728x90

본 포스팅은 한빛 미디어의 '이것이 MariaDB다'를 참고하여 작성하였습니다.

http://www.hanbit.co.kr/store/books/look.php?p_code=B1764282969

 

이것이 MariaDB다

이 책은 실무에서 바로 적용 가능한 다양한 실습 예제를 통해 데이터베이스 개발과 운영을 모두 체험해 볼 수 있게 구성했다. 책의 도입부에서는 ‘MariaDB 전체 운영 실습’을 미리 진행해보며 기본적인 데이터베이스 운영의 개념과 자신감을 얻을 수 있다. 이후부터는 앞서 훑어 보았던 내용을 스텝별로 상세히 실습하며 자연스럽게 실전감각을 익힌다. 특히 후반부에는 PHP 프로그래밍을 MariaDB와 연동하여 웹에서도 활용할 수 있도록 구성했다. 책의 마지막까

www.hanbit.co.kr

1. 구조

2. 용어

  • 데이터 : 단편적인 정보. 
  • 테이블 : 데이터를 입력하기 위해 표 형태로 표현한 것
  • 데이터베이스(DB) : 테이블이 저장되는 저장소. 데이터베이스는 서로 다른 이름을 가져야 함.
  • DBMS : DataBase Management System. 데이터베이스를 관리하는 시스템 또는 소프트웨어. 

데이터 ⊂ 테이블 ⊂ 데이터베이스  DBMS

  • 행 : 실질적인 데이터. 로우, 데이터라고도 함. 가로 줄
  • 열 : 각 테이블은 열로 구성된다. 칼럼, 필드라고도 함. 세로 줄
  • 기본 키 열 : 각 행을 구분하는 유일한 열. 각 테이블에는 기본키가 하나만 지정되어야 함.
  • 열 이름 : 각 열을 구분하기 위한 이름. 테이블 내에서는 열 이름이 겹치지 않아야 한다.
  • 데이터 형식 : 열의 데이터 형식. 테이블을 생성할 때 열 이름과 함께 지정해야 함.
  • 행 : 실질적인 데이터. 로우, 데이터라고도 함. 가로 줄
  • SQL : Structured Query Language. DB를 사용하기 위한 언어.
728x90
728x90

1. MariaDB 설치

설치전에 먼저 sudo apt-get update로 업데이트를 해준다.

업데이트가 완료됐다면 apt-cache search mariadb 명령어를 입력해 관련 패키지가 있는지 검색한다.

그 다음 sudo apt-get install mariadb-server를 실행해 mariadb를 설치한다.

설치가 다 되었다면 sudo mysql -u root을 입력하면 MariaDB에 들어가지고 show databases;를 실행하면 database들을 확인할 수 있다.

2. 계정 설정

설치 중간에 root비밀번호를 설정하는 창이 안나오는 사람들은 root 비밀번호를 따로 설정해줄 수 있다.

먼저 use mysql 명령어를 입력해 mysql로 접속한다.

MariaDB 옆에 none이 mysql로 바뀐것을 볼 수 있다. 여기서 아래 명령어를 입력한다.

select user, host, password from user;

그럼 root 계정의 비밀번호가 비어있는것을 확인할 수 있다. 아래 명령어를 입력해 비밀번호를 설정해주자.

update user set password=password('1234') where user = 'root';

그 후 다시 아래 명령어로 확인해보면 설정된 것을 볼 수 있다.

select user, host, password from user;

3. 외부접속 설정

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

를 입력해 50-server.cnf 파일에서 bind-address = 127.0.0.1부분을 주석처리해준다.

다음으로 아래 명령어를 입력해 방화벽 설정을 해준다.

 

sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --dport 3306 -j ACCEPT
sudo iptables-save

마지막으로 다시 MariaDB에 접속 후 mysql에서 권한을 설정한다.

sudo mysql -u root
use mysql;
grant all privileges on *.* to 'root'@'%' identified by '비밀번호';
flush privileges;

마지막으로 sudo service mysql restart를 해준다.

4. 접속 테스트

윈도우에서 heidi SQL을 실행한다. 신규로 새로운 세션을 만들어 IP에는 PI의 IP, 암호에 root계정 비밀번호를 입력 후 저장한다.

Pi 세선을 열기해서 아래와 같이 뜬다면 제대로 설정된 것이다.

참고자료

- https://note.espriter.net/1265

https://wlsufld.tistory.com/50

 

 

728x90

+ Recent posts