HCD 랩스 10월 3주차

우영·2025년 10월 13일

HDC 랩스 풀스택 1기

목록 보기
8/20
post-thumbnail

비쥬얼 코드에서 explorer에 open folder 해도 안될 경우

ctrl + shift + P 으로 command 창 열고, View: Reset View Locations 선택하면 왼쪽에 view 목록이 리셋되면서 보임

  • extension 에서 uninstall해서 install 다시해서 >python select interpreter 하면 실행 표시 생김

이번주 - mqtt, 라즈베리파이 기본 작업 후 통신 연결, 파이썬 제어, 스레드 처리, 라즈베리파이에서 직렬통신이나 아날로그 통신하는 방법

10/13 - 리눅스, 라즈베리파이 T와 브래드보드랑 연결

assignment
파이썬 성적관리 - 자바 메인 하나에 풀기
https://blog.naver.com/heaves1/224025711023 - sql 최종 완성하고 이해하기

review
fstring, function_args_exam2, 클래스 예제1, join, mro, file_test1. SQL 인라인뷰


  • vscode, cmd, putty -> raspberry
    client : 요청 하는 쪽

cd : 홈디렉토리 이동
pwd : 현재 디렉토리
ls : 목록 출력
sudo : 접근 제한 걸리면

  • var/log가 있음
    passwd : 비번바꾸기

  • https://winscp.net/eng/download.php
    파일 주고받기 라즈베리파이 -> window로 내려 받는 작업은
    머신1, 머신2 각각의 컴퓨터들
    SCP : 복제할때 쓰는 것
    윈도우 10부터 SCP를 지원함.
    SSH 통신과 동일 - 하지만 암호가 반드시 필요! 결국 할 게 많음 그래서 SCP 작성

  • 계정 암호가 있어야 함.

cp : 동일머신에서 파일이나 디렉토리 복사
scp : 머신에서 머신으롤 파일이나 디렉토리를 복사 // 머신은 컴퓨터

  • ssh 프로토콜을 이용해서 서버에서 서버로 파일이나 디렉토리 복사
    scp [옵션] 원본파일경로 대상경로
    scp 파일(디렉토리경로) pi@192.168.14.99:/home/pi

로드밸런싱 : 서버에서 또 다른 서버들로 나누는 것
22번 포트가 ssh 전용 포트
[그룹과 사용자]
그룹생성

  • addgroup 그룹명

사용자생성

  • adduser 사용자명
    => 상용자를 만들때 그룹을 지정하지 않으면 사용자명과 동일한 그룹이 생성되고 그 그룹에 사용자가 추가
    adduser 사용자명 --ingroup 그룹명

정보확인

  • cat /etc/passwd -> 사용자확인
  • cat /etc/group -> 그룹확인
  • groups 계정 -> 계정이 속한 그룹 목록

이미 만들어진 사용자를 그룹에 추가
sudo usermod -aG aaa kim // aaa : 그룹명 kim : 계정명
sudo gpasswd -d lee aaa : aaa 그룹에서 lee빼기
sudo groupdel aaa : 그룹 삭제
sudo deluser kim --remove-home : user 삭제

chmod 권한
777 읽기 쓰기 실행

  • [미션]
    park계정접속해서 myfile을 생성하고 test문자열을 쓰기

같은 기본 그룹의 사용자는 읽고 쓰기가 가능하고
다른 그룹의 사용자는 읽기만 할 수 있도록 권한변경
디렉토리에 대한 접근권한 변경

  • 권한 캡쳐
  • jung계정으로 접속해서 읽고 쓰기가 가능한지 확인
  • lee계정으로 접속해서 읽기는 가능하지만 쓰기가 불가능한지 확인
  1. park계정으로 접속해서 myfile을 생성하기
  2. pi계정으로 접속해서 권한 설정(파일과 디렉토리)
  3. jung계정으로 접속해서 cat, nano명령어를 실행
  4. lee계정으로 접속해서 cat,nano명령어를 실행

10/14 - PVM - 버튼, 부저, 서브모터

assignment
파이썬 성적관리 - 자바 메인 하나에 풀기
https://blog.naver.com/heaves1/224025711023 - sql 최종 완성하고 이해하기

  • 프로젝트 주제들에 대해서 찾아보고 설문하기
  • ssh ubuntu@3.39.204.163
    LedButton이라는 클래스를 만들고 작업할 수 있도록 변경
  • 멤버변수(led_pin, push_pin)
  • 생성자 모든 초기화 작업을 다해야 함
  • toggle 메소드 내부에서 기본적으로 누르면 불이 켜지고 누르면 불이 꺼지는 작업
  • main에서 작업되도록 -> __main : 이름이 메인인지 확인하고 작업

review
fstring, function_args_exam2, 클래스 예제1, join, mro, file_test1. SQL 인라인뷰


vscode에서 라즈베리 파이 연동할 때
검색 창에 F1 누르고 remote sssh~~~ 선택
-> pi@192.168.14.79 입력 후 add new ssh host... 선택
-> 암호 입력

전압, 전류 (높은 곳에서 낮은 곳으로 흐름), 저항(방해요소)

  • led 켜보기

visual studio - f1 - to add ssh - pi@192.168.14.99 - 추가
test.py 파일 만들기 - extension - python extension pack install

GPIO23 -> led -> 저항 -> gnd

  • 버튼 누르면 불 켜지고, 다시 누르면 불 꺼지고 반복
# push_switch_polling_test.py
# 푸시버튼을 이용하는 방법은 폴링과 인터럽트 방식이 있다.
# 폴링은 간단하게 구현 가능 
# 프로그램이 무한루프를 실행하면서 버튼이 눌려지는 것을 끊임없이 확인

import RPi.GPIO as gpio
import time 

led_pin1 = 23
pin = 27
gpio.setmode(gpio.BCM)
gpio.setup(pin,gpio.IN, pull_up_down= gpio.PUD_UP)
gpio.setup(led_pin1,gpio.OUT)
led_state = False # led 상태를 저장하는 변수

while True:
    state = gpio.input(pin)
    if state == 0:
        if led_state == False:
            led_state = True
            gpio.output(led_pin1,True)    
        else:
            led_state = False
            gpio.output(led_pin1,False)
            
gpio.cleanup()

# # push_switch_polling_test.py
# # 푸시버튼을 이용하는 방법은 폴링과 인터럽트 방식이 있다.
# # 폴링은 간단하게 구현 가능 
# # 프로그램이 무한루프를 실행하면서 버튼이 눌려지는 것을 끊임없이 확인

# import RPi.GPIO as gpio
# import time 

# led_pin1 = 23
# pin = 27
# gpio.setmode(gpio.BCM)
# gpio.setup(pin,gpio.IN, pull_up_down= gpio.PUD_UP)
# gpio.setup(led_pin1,gpio.OUT)
# led_state = False # led 상태를 저장하는 변수

# while True:
#     state = gpio.input(pin)
#     if state == 0:
#         if led_state == False:
#             led_state = not led_state
#             gpio.output(led_pin1,led_state)  
#         time.sleep(0.5)
# gpio.cleanup()

폴링방식 : 무한대기 하는 중, 다른 작업을 못함. while문, thread로 돌려야 함.

ssh ubuntu@3.39.204.163

# LedButton이라는 클래스를 만들고 작업할 수 있도록 변경
# - 멤버변수(led_pin, push_pin)
# - 생성자(초기화)
# - toggle 메소드
# - main에서 작업되도록

import RPi.GPIO as GPIO
import time

class LedButton:
    def __init__(self, led_pin, push_pin):
        self.led_pin = led_pin
        self.push_pin = push_pin
        self.led_state = False
        
        GPIO.setmode(GPIO.BCM)
        GPIO.setup(self.push_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
        GPIO.setup(self.led_pin, GPIO.OUT)
        GPIO.add_event_detect(self.push_pin, GPIO.FALLING, callback=self.toggle, bouncetime=500)
    def toggle(self, channel):
        self.led_state = not self.led_state
        self.led_state == False
        GPIO.output(self.led_pin,self.led_state)
        print("LED_", "on" if self.led_state else "off")
        
if __name__ == "__main__":
    try:
        led = LedButton(24,27) 
        while True:
            print("아무일")
            time.sleep(0.1)
    finally:
        GPIO.cleanup()
  • 로컬에 저장하는 방법

    • winscp 원격 복사 -> 로컬로 붙여넣기
  • 부저

    • 트랜지스터를 쓰면 전원을 싹 끌어서 전해줌. 오늘은 없어서 짧게 테스트
      모터도 마찬가지 외부 모터를 대지 않고 할 수 있는 것도 있음.
    • 주파수를 지정 - changeque
  • 서브 모터

  • 0 ~ 13까지 설정해서 0도에서 180도까지

  • 이번주 과제

# 스위치 2개, 서보모터, LED, 부저
# 1번 스위치를 누르면 +10도씩 이동
# 2번 스위치를 누르면 - 10도씩 이동
# 180도가 되면 스위치1을 눌러도 180도가 유지되도록
# 4. 0도가 되면 스위치2를 눌러도 0도 유지 
# 5. 0도와 180도가 되면 부조에서 소리가 나도록 처리
# 6. 90도에서 100도 사이에 LED불이 켜지도록 작업
# 7. 모든 작업은 함수로 처리
# 8. 함수로 먼저 하고 모든 작업을 클래스로 설계

10/15 - - PVM(메인에서 실행되는 흐름동안 뒤에서 흐르는 흐름) : 서브모터(펄스폭(1이 유지되는 시간)이 중요), MQTT 자바와 라즈베리파이 연결 sub, pub

assignment
파이썬 성적관리 - 자바 메인 하나에 풀기
https://blog.naver.com/heaves1/224025711023 - sql 최종 완성하고 이해하기

  • 프로젝트 주제들에 대해서 찾아보고 설문하기
  • ssh ubuntu@3.39.204.163
    LedButton이라는 클래스를 만들고 작업할 수 있도록 변경
  • 멤버변수(led_pin, push_pin)
  • 생성자 모든 초기화 작업을 다해야 함
  • toggle 메소드 내부에서 기본적으로 누르면 불이 켜지고 누르면 불이 꺼지는 작업
  • main에서 작업되도록 -> __main : 이름이 메인인지 확인하고 작업

review
fstring, function_args_exam2, 클래스 예제1, join, mro, file_test1. SQL 인라인뷰

  • mqtt 폴더에 있는 자바파일 4개
  • 자바 이클립스 프로젝트 mqtt - 월요일


  • 그 다음에 .jal 누르고

  • 폴더 찾아가서 .jal add 하고 configure
    이해 필요!!

  • subscribe, publisher

  • public class MyMqttCallback implements MqttCallback{ // mqttClient.setCallback(new MyMqttCallback());

  • 과제 해보기

    • ExamPub
    • ExamSub
  1. 라즈베리파이로 publish
    9단 전송
    => 한줄씩 전송
    => topic : exam

  2. 라즈베리파이에서 보내는 데이터를 받아서 데이터를 작업(Sub - MqttCallback은 익명이너클래스이용)
    => 보내는 메세지가 sensor면 디비에 저장(sysout으로 출력만)
    => led로 시작하는 메시지 중 on이면 led 켜기
    led로 시작하는 메세지 중 off면 led끄기 메세지만 sysout으로 출력

  3. javaApplication <- 라즈베리파이
    javaApplication -> 라즈베리파이

  4. 짝과 테스트해서 전송

mosquitto_sub -h 192.168.14.62 -t exam
mosquitto_pub -h 192.168.14.62 -t exam -m "led on"
pi@raspberrypicwy:~ $ mosquitto_pub -h 192.168.14.56 -t exam -m "led on"

10/16 - 자바 스레드를 써야 하는 이유: 블럭 현상을 막기 위함

assignment
파이썬 성적관리 - 자바 메인 하나에 풀기
https://blog.naver.com/heaves1/224025711023 - sql 최종 완성하고 이해하기

  • 프로젝트 주제들에 대해서 찾아보고 설문하기
  • ssh ubuntu@3.39.204.163
    LedButton이라는 클래스를 만들고 작업할 수 있도록 변경
  • 멤버변수(led_pin, push_pin)
  • 생성자 모든 초기화 작업을 다해야 함
  • toggle 메소드 내부에서 기본적으로 누르면 불이 켜지고 누르면 불이 꺼지는 작업
  • main에서 작업되도록 -> __main : 이름이 메인인지 확인하고 작업

review
fstring, function_args_exam2, 클래스 예제1, join, mro, file_test1. SQL 인라인뷰


10/16 - 자바 스레드, 파이썬 MQTT

assignment
파이썬 성적관리 - 자바 메인 하나에 풀기
https://blog.naver.com/heaves1/224025711023 - sql 최종 완성하고 이해하기

  • 프로젝트 주제들에 대해서 찾아보고 설문하기
  • ssh ubuntu@3.39.204.163
    LedButton이라는 클래스를 만들고 작업할 수 있도록 변경
  • 멤버변수(led_pin, push_pin)
  • 생성자 모든 초기화 작업을 다해야 함
  • toggle 메소드 내부에서 기본적으로 누르면 불이 켜지고 누르면 불이 꺼지는 작업
  • main에서 작업되도록 -> __main : 이름이 메인인지 확인하고 작업

review
fstring, function_args_exam2, 클래스 예제1, join, mro, file_test1. SQL 인라인뷰


스레드 구현
1. Thread 상속받기
2. Runnable 인터페이스 구현

프로젝트 회의

  • 스마트 팜

    • 장소, 어떤 식물을 기르는지, 습도,온도,조명, 수분
      프로젝트 : 어플리케이션으로 콘솔에 찍으면서 출력하는 것
      DB: MySQL
      라즈베리파이: python
      지바: 콘솔
      MQTT 통신으로 다함 - DB - 자바 - 라즈베리기기 제어(ADC(아날로그 장비를 제어하는 것: 반나절 필요) 필요한데 배송 X), 필요한 장비 구매, 사전 작업,
      라즈베리파이 장치 : LED(다같이), 온/습도, 토양 수분,

    콘솔

    • 회원가입

      • id
      • password
      • email
    • 로그인

      • id
      • password
    • 팜 정보 조회


    DB <-> 자바클라이언트 - MQTT (pub,sub)
    집가서 자바 - mqtt, 파이썬 - mqtt 둘 다 복습하기
    프로젝트 장치 살거, 전체 ui, 서비스단, DB 생각

0개의 댓글