728x90

1. drawable xml file 생성

먼저 res/drawable 폴더에 우클릭을 하여 Drawable resource file을 생성한다.

File name은 본인이 원하는대로 설정하고 Ok를 눌러준다.

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <stroke
        android:color="#000000"
        android:width="1dp"/>
    <solid
        android:color="#ffffff" />
    <size
        android:height="100dp"
        android:width="100dp" />
</shape>

stroke는 선의 색과 두께를 설정하고, solid는 배경 색을 설정, size는 크기를 설정한다.

2. TextView xml

<TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="hi"
            android:gravity="center"
            android:background="@drawable/oval"/>

위와 같이 코드를 작성하면 아래같이 적용된 것을 볼 수 있다.

728x90
728x90

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

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

 

이것이 MariaDB다

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

www.hanbit.co.kr

1. 작업환경

Windows 10 64bit

2. MariaDB 설치

먼저 https://downloads.mariadb.org/mariadb/10.3.17/ 에 접속한다.

 

그 후 아래의 mariadb-10.3.17-winx64.msi를 클릭하면 다음 페이지로 넘어가면서 자동으로 다운을 시작한다.

설치가 완료됐다면 mariadb-10.3.17-winx64.msi을 실행한다.

Custom Setup에서 본인이 원하는 항목을 선택할 수 있는데 그대로 두고 Next를 누른다.

아래 화면에서 MariaDB의 관리자 비밀번호를 설정해준다. Enable access from remote machines for 'root' user을 체크하면 외부에서 root 계정의 접속을 허용하는 것이고, Use UTF8 as defulat server's character set은 한글을 원활하게 입력하기 위해 체크한다.

Service Name과 TCP port를 입력하는 창이다. defualt값으로 나두고 Next를 클릭한다.

피드백을 할지말지 선택할 수 있는 창이다.

이제 Install을 눌러주면 설치가 시작된다.

설치가 완료됐다면 Finish를 눌러준다.

시작메뉴를 보면 MariaDB 10.3이 설치된 것을 확인할 수 있다.

3. Heidi SQL 실행

Heidi SQL은 MariaDB 통합 IDE 환경이고 MariaDB와 관련된 대부분의 작업을 GUI로 처리하고 결과를 확인할 수 있는 클라이언트 프로그램이다.

 

먼저 왼쪽 아래의 신규를 클릭한다.

아래와 같이 창이 뜨면 암호에 설치할때 설정해둔 root 비밀번호를 입력 후 왼쪽 탭의 세션 이름의 Unnamed를 오른쪽 클릭하여 이름을 바꿔준다. 이름을 바꿨다면 저장 후 열기를 눌러준다.

열기를 누르면 아래 같은 화면이 나온다.

4. Path 추가

windows 시작 버튼에 오른쪽 클릭을 한 후 Windows Powershell(관리자)를 클릭하여 실행한다.

PowerShell에서 cmd를 입력해 명령 프롬프트를 실행시켜주고 아래 명령어를 입력해 Path를 추가한다.

SETX PATH "C:\Program Files\MariaDB 10.3\bin;%PATH$" /M

성공했다는 메시지가 나오면 창을 닫는다.

5. MariaDB 접속

다시 Powershell을 열어 mysql -u root -p를 입력하면 패스워드를 입력하는 라인이 출력된다. 비밀번호를 입력하면 MariaDB로 접속이 된다.

728x90
728x90

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

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

 

이것이 MariaDB다

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

www.hanbit.co.kr

1. MariaDB란?

MariaDB는 MariaDB사에서 제작한 RDBMS(Relational DataBase Management System)로 오픈소스로 제공된다. 

MariaDB logo

2. RDBMS란?

RDBMS(Relational DataBase Management System) 관계형 DBMS를 말한다. 여기서 DMBS는 데이터베이스를 관리하고 운영하기 위한 시스템 또는 소프트웨어를 말한다.

 

RDBMS의 핵심 개념은 '데이터베이스는 테이블이라고 불리는 최소단위로 구성되어 있고, 테이블은 하나 이상의 열로 구성되어 있다.' 이다.

 

RDMBS는 업무가 변화될 경우 쉽게 변화에 순응할 수 있는 구조이며, 유지보수 측면에서도 편리한 특징을 가지고 있다는 장점이 있다. 또한 대용량의 데이터의 관리와 데이터 무결성의 보장을 잘 해주기 떄문에 동시에 데이터에 접근하는 응용프로그램을 사용할 경우에 적합하다.

3. MySQL과 MariaDB

MySQL은 1995년 MySQL AB사에서 오픈소스로 제작된 이후 2008년 썬 마이크로시스템즈사에서 MySQL AB사를 인수 그리고 2010년 오라클에서 썬마이크로시스템즈사를 인수함으로써 MySQL은 오라클사의 소유가 됐다.

 

MySQL은 현재 비상업용이나 교육용으론 제한없이 사용해도 되지만, 상용으로 사용하기 위해서는 상용 라이선스를 취득해야 한다. 반면 MariaDB는 어떤 환경에서도 제한 없이 사용할 수 있다. MariaDB는 MySQL과 호환성을 대부분 유지하므로 MySQL을 사용하던 환경에서 문제없이 변경된다.

 

 

728x90
728x90

라즈베리파이에서 파이 카메라와, motion을 이용해 웹에서 스트리밍을 할 수 있다. 그 스트리밍 된 영상을 WebView를 이용해 어플에서 볼 수 있게 하려 한다.

https://1d1cblog.tistory.com/18

 

라즈베리파이 motion 사용하기

1. motion 이란? 카메라로 영상을 촬영해서 실시간으로 스트리밍할 수 있는 프로그램이다. 사진 촬영 그리고 동영상 녹화도 가능하고 모션감지 기능도 있다. 2. 라즈베리파이 카메라 연결 파이와 카메라를 준비한..

1d1cblog.tistory.com

1. AndroidManifest.xml 수정

인터넷 사용을 위해 AndroidManifest.xml 파일에 아래 코드를 추가한다.

<uses-permission android:name="android.permission.INTERNET" />

2. XML 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".CCTV">
 
    <WebView
        android:id="@+id/cctvweb"
        android:layout_marginTop="30dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter

3. Java

아래 코드는 개인 프로젝트에서 사용하기 위해 Fragment에 짠 코드이다.

public class CCTV extends Fragment {
    WebView webView;
    WebSettings webSettings;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_cctv, container, false);
 
        webView = (WebView) view.findViewById(R.id.cctvweb);
        webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);
 
        webView.loadData("<html><head><style type='text/css'>body{margin:auto auto;text-align:center;} " +
                        "img{width:100%25;} div{overflow: hidden;} </style></head>" +
                        "<body><div><img src='http://11.11.11.111:1111/'/></div></body></html>" ,
                "text/html",  "UTF-8");
 
        return view;
    }
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter

중간의 img src에 본인 motion 스트리밍 주소를 적으면 된다. WebView의 loadData를 사용하여 HTML 코드를 넣으면 아래 실행화면처럼 영상을 잘리는 거 없이 볼 수 있지만 loadUrl을 사용하면 웹을 통째로 불러와 적합하지 않다.

4. 실행화면

loadData 사용 시
loadUrl 사용 시

참고자료

- 코스모스님 naver blog : https://m.blog.naver.com/PostView.nhn?blogId=cosmosjs&logNo=220824316155&categoryNo=80&proxyReferer=https%3A%2F%2Fwww.google.com%2F

728x90
728x90

1. 인체감지센서(SIS612P)

인체감지센서 SIS612P

SIS612P는 사람에게서 나오는 적외선을 감지해주는 센서이다. SIS612P의 사양은 다음과 같다.

항목 사양
측정 범위 100º
최대 감지 거리 7m
사용 전압 +5 ~ 24V

2. SIS612P 연결

센서 전면부
센서 후면부

3시 방향의 핀에서 VDD를 VCC, GND를 GND, OUT을 원하는 핀에 꽂아준다.

그리고 3개의 노란 볼트들을 돌려주면 감도를 설정할 수 있는데 11시(감도 설정), 1시(TIME 설정), 5시(주변 밝기 설정)이다.

3. SIS612P 측정 방식

SIS612P는 감지되었을때 HIGH 아니었을때 LOW로 값이 나오게 된다.

4. 소스(C)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include<iostream>
#include<wiringPi.h>
 
#define HUMAN 1
 
using namespace std;
 
int main()
{
    if (wiringPiSetup() == -1)
        exit(1);
 
    pinMode(HUMAN, INPUT);
 
    while (1)
    {
        if (digitalRead(HUMAN) == HIGH)
        {
            cout << "HIGH" << endl;
        }
        else
            cout << "LOW" << endl;
        delay(1000);
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter

5. 실행화면

 

728x90
728x90

1. 프로젝트 생성

New project를 눌러 Bottom Navigation Activity를 선택 후 생성한다.

2. Menu 수정

app > menu > bottom_nav_menu.xml 파일이 메뉴를 구성하는 xml 파일인데 본인의 필요에 맞게 수정한다.

3. activity_main.xml 수정

activity_main.xml 파일에 FrameLayout을 추가 후 아래와 같이 코드를 작성한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
 
    <FrameLayout
        android:id="@+id/frameLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginBottom="?attr/actionBarSize"
        />
 
        android:id="@+id/nav_view"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="0dp"
        android:layout_marginEnd="0dp"
        android:background="?android:attr/windowBackground"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:menu="@menu/bottom_nav_menu" />
 
</android.support.constraint.ConstraintLayout>
 

4. Fragment 추가

아래와 같은 방법으로 본인이 필요한만큼의 Fragment를 생성한다.

생성 후 Fragment 파일은 생성 그대로 사용하고 xml파일을 아래코드처럼 수정한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Home">
 
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="homeFragment" />
 
</FrameLayout>
 

5. MainActivity.java 수정

마지막으로 MainActivity.java를 아래 코드처럼 작성한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 
import android.support.annotation.NonNull;
 
public class MainActivity extends AppCompatActivity {
    BottomNavigationView bottomNavigationView;
 
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction;
 
    Home homeFragment = new Home();
    Notification notificationFragment = new Notification();
    Dashboard dashboardFragment = new Dashboard();
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        bottomNavigationView = findViewById(R.id.nav_view);
 
        fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.frameLayout, homeFragment).commitAllowingStateLoss();
 
        bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
                switch (menuItem.getItemId()) {
                    case R.id.navigation_home:
                        fragmentTransaction.replace(R.id.frameLayout,homeFragment).commitAllowingStateLoss();
                        break;
                    case R.id.navigation_dashboard:
                        fragmentTransaction.replace(R.id.frameLayout,dashboardFragment).commitAllowingStateLoss();
                        break;
                    case R.id.navigation_notifications:
                        fragmentTransaction.replace(R.id.frameLayout,notificationFragment).commitAllowingStateLoss();
                        break;
                }
                return false;
            }
        });
    }
 
}
 

제대로 작성했다면 아래처럼 Navigation Button을 클릭했을 때 Fragment가 전환되는 것을 확인할 수 있다.

참고자료

- 시계는 와치님 tistory blog : https://dev-imaec.tistory.com/11

728x90
728x90

1. motion 이란?

카메라로 영상을 촬영해서 실시간으로 스트리밍할 수 있는 프로그램이다. 사진 촬영 그리고 동영상 녹화도 가능하고 모션감지 기능도 있다.

2. 라즈베리파이 카메라 연결

라즈베리파이 카메라

파이와 카메라를 준비한다. 빨간 원으로 체크한 파이의 검은 부분을 들어올린다. 

그 후 파이 카메라의 은색 부분을 HDMI 포트 방향으로 꽂는다.

sudo raspi-config 명령어를 실행한 다음 Interfacing Option > Camera 를 선택해 활성화 시켜준다.

카메라가 제대로 인식되었는지 확인하기 위해 vcgencmd get_camera 명령어를 입력했을때 아래처럼 출력된다면 제대로 인식된 것이다.

3. motion 설치 및 세팅

sudo apt-get install motion을 실행해 motion을 설치한다.

그 후 여러 설정을 위해 sudo nano /etc/motion/motion.conf 명령을 통해 motion.conf 파일을 수정한다.

  • daemon on (default off) : 부팅 시 백그라운드에서 자동으로 실행
  • framerate 5 (defualt 5) : 영상 프레임 세팅. 
  • stream_maxrate 10 (defualt 1) : 스트리밍 영상 프레임 
  • stream_port 본인자유 (defualt 0 = disabled) : TCP/IP 포트 설정
  • stream_localhost off (defualt on) : 캠 접속을 로컬호스트에서만 가능하게 할 것인지

설정을 다 했다면 저장 후 다음으로는 sudo nano /etc/defualt/motion 를 실행해 start_motion_daemon 항목을 no에서 yes로 수정한다.

4. motion 실행

설정을 다 했다면 sudo motion로 motion을 구동한다. 그 후 http://라즈베리파이ip:stream_port 를 주소창에 입력하면 아래처럼 스트리밍이 되는것을 볼 수 있다.

 

 

 

728x90
728x90

1. VNC란?

VNC(Virtual Network Computing, 가상 네트워크 컴퓨팅)는 컴퓨터 환경에서 RFB 프로토콜을 이용하여 원격으로 다른 컴퓨터를 제어하는 그래픽 데스크톱 공유 시스템이다. 라즈베리파이에 모니터를 연결하지 않고 데스크탑에서 라즈베리파이 화면을 보면서 제어를 할 수 있는 프로그램이다.

2. 라즈베리파이 VNC 설정

$ sudo raspi-config로 설정창에 들어간다.

Interfacing Options로 들어간 다음 VNC를 선택 후 VNC server를 활성화 시켜준다.

3. 원격 PC에 VNC Viewer 설치

https://www.realvnc.com/en/connect/download/viewer/ 에 접속한다. 아래 화면에서 Download VNC Viewer를 클릭한다.

다운로드 받은 설치 파일을 클릭하고 계속 설치한다.

VNC Viewer을 실행하면 처음에 아래처럼 화면이 뜨면 GOT IT버튼을 눌러 넘어가준다.

아래와 같은 화면에 Enter a VNC Server address or search안에 원격으로 접속할 라즈베리파이의 IP를 입력해준다.

접속이 되면 아래처럼 창이 뜨게 되고 Contiune를 누르게 되면 Pi의 아이디 비밀번호를 입력하는 창이 나온다.

아이디 비밀번호를 입력 후 들어가면 아래처럼 접속을 할 수 있다.

 

728x90

+ Recent posts