RaspberryPi-NFC 방패 웹 앱

MiFare 카드 리더기와 캐릭터 액정이 달린 RaspberryPi 실드의 프로토 타입.



이것을 웹 앱에서 사용하기 위한 설정 예입니다.

환경


  • Raspbian Buster with desktop
    2020-02-13 판
  • Raspberry Pi 3 Model B

  • 설치하고 WiFi, 로케일, 업데이트 등의 설정을 끝내십시오.
    네트워크 설정도 마칩니다.

    vim 설치


    
    sudo apt install vim
    

    그런 다음 vim의 시각 모드를 해제합니다.

    /home/pi/.vimrc 및/root/.vimrc 내부에 set mouse=
    행 설정

    1602LCD 이동



    도서관
    
    sudo pip3 install adafruit-circuitpython-charlcd
    

    이제 움직이기 때문에 IP 주소 스크립트를 넣으십시오.

    LCDmessage.py 만들기
    
    #!/usr/bin/env python
    
    import sys
    
    import Adafruit_CharLCD as LCD
    lcd_rs        = 26
    lcd_en        = 19
    lcd_d4        = 20
    lcd_d5        = 21
    lcd_d6        = 22
    lcd_d7        = 27
    #
    lcd_columns = 16
    lcd_rows    = 2
    #
    #
    lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7,
                           lcd_columns, lcd_rows)
    lcd.clear()
    if ( 2 >  len(sys.argv)):
      lcd.message("No IP address.")
    if ( 1 <  len(sys.argv)):
      message = sys.argv[1]
      lcd.message(message)
    if ( 2 <  len(sys.argv)):
      message = sys.argv[2]
      lcd.message("\n")
      lcd.message(message)
    # cursol blink
    lcd.blink(False)
    
    

    MiFare 카드 리드



    라이브러리 설치
    
    pi@raspberrypi:~ $ git clone https://github.com/ondryaso/pi-rc522.git
    pi@raspberrypi:~ $ cd pi-rc522
    pi@raspberrypi:~/pi-rc522 $ sudo python3 setup.py install
    

    wiringpi 설치
    
    pi@raspberrypi:~ $ wget https://project-downloads.drogon.net/wiringpi-latest.deb
    pi@raspberrypi:~ $ sudo dpkg -i wiringpi-latest.deb
    pi@raspberrypi:~ $ sudo pip3 install wiringpi
    

    아마 마지막만으로 갈 수 있을까?

    vim read_once_with_key_LCD_onlyID.py
    
    from pirc522 import RFID
    # Calls GPIO cleanup
    import Adafruit_CharLCD as LCD
    
    
    import RPi.GPIO as GPIO
    #rdr = RFID(0,0,1000000,22,0,18,GPIO.BOARD)
    rdr = RFID(0,0,1000000,25,0,24,GPIO.BCM)
    
    
    lcd_rs        = 26
    lcd_en        = 19
    lcd_d4        = 20
    lcd_d5        = 21
    lcd_d6        = 22
    lcd_d7        = 27
    #
    lcd_columns = 16
    lcd_rows    = 2
    #
    #
    lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7,
                           lcd_columns, lcd_rows)
    import sys
    import time
    import wiringpi as w
    w.wiringPiSetup()
    w.pinMode(1,1)
    sector = int(sys.argv[1])
    # print('target sector = : ', sector)
    lcd.clear()
    lcd.message('Ready')
    while True:
      rdr.wait_for_tag()
      (error, tag_type) = rdr.request()
      if not error:
    #    print("Tag detected")
        (error, uid) = rdr.anticoll()
        if not error:
    #      print("  UID: " + str(uid))
          # Select Tag is required before Auth
          if not rdr.select_tag(uid):
    #        print("  not rdr.select_tag")
    
            # Auth for block  using default shipping key A
            if not rdr.card_auth(rdr.auth_a, sector, [0xA0, 0xB1, 0xC0, 0xD1, 0xE0, 0xE1], uid):  # key is example
              # This will print something like (False, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
    #          print("      Reading sector "+ str(sector) +" " + str(rdr.read(sector)))
              (error,data)=rdr.read(sector)
              if not error:
    #            print( str(data))
    #            print( str(data))
                data2=data[0:10]
                id=(''.join(map(chr,data2)))
                print(id)
                lcd.clear()
                lcd.message(id)
                w.digitalWrite(1,1)
                time.sleep(0.1)
                w.digitalWrite(1,0)
    
                break
    
              # Always stop crypto1 when done working
              rdr.stop_crypto()
    
    rdr.cleanup()
    
    

    apache2 설치


    
    sudo apt install vim apache2
    

    샘플 페이지 삭제
    
    sudo rm /var/www/html/index.html
    
    

    부팅 설정



    /etc/rc.local 뒤쪽을 다음과 같이 조정
    
    ifconfig eth0:1 169.254.12.24
    
    sleep 5 # 環境により調整
    
    # Print the IP address
    _IP=$(hostname -I) || true
    if [ "$_IP" ]; then
      printf "My IP address is %s\n" "$_IP"
    fi
    
    python3 /home/pi/LCDmessage.py $_IP
    mount -o exec,uid=33,gid=33 /dev/sda1 /mnt
    /mnt/trans.sh & > /dev/null
    
    exit 0
    
    

    원래는 IP 주소를 화면에 표시하지만, 그 외에도
  • 보조 IP 주소 설정
  • IP 주소를 LCD에 표시
  • www-data 사용자 권한으로 USB 메모리를 프로그램 실행 가능/mnt에 마운트
  • USB 메모리에 trans.sh가 있으면 자동 실행

  • USB 메모리를 DocumentRoot로



    /etc/apache2/sites-enabled/000-default.conf를 다음과 같이 편집
    
    #       DocumentRoot /var/www/html
            DocumentRoot /mnt
    
    

    USB 메모리의 프로그램 실행 가능



    www-data에서 GPIO를 사용할 수 있도록 sudoers에 다음 추가
    
    www-data ALL=(ALL) NOPASSWD: ALL
    

    /etc/apache2/apache2.conf를 다시 작성하여/mnt에서 cgi가 작동하도록 합니다.
    
    #<Directory /var/www/>
    #       Options Indexes FollowSymLinks
    #       AllowOverride None
    #       Require all granted
    #</Directory>
    
    
    <Directory /mnt/>
            Options Indexes FollowSymLinks execCGI
            AddHandler cgi-script .cgi .pl
            AllowOverride None
            Require all granted
    </Directory>
    

    cgi 사용


    
    $ sudo a2enmod cgid
    

    한다.

    Xojo 용 라이브러리 설치



    웹 앱을 Xojo로 만들려면 다음이 필요합니다.
    
    pi@raspberrypi:~/xojo/RemoteDebuggerConsole $ sudo apt install libunwind8
    

    좋은 웹페이지 즐겨찾기