ESP-NOW는 ESP32에서 지원하는 ESP32간의 통신 방식이다. WiFi 방식을 기반하고, 실제로 소스에도 WiFi Station 모드를 명시하는데 정확한 내부 로직은 더 알아봐야 할 것 같다. ESP32가 직접 AP(공유기 역할)을 할 수도 있고 공유기에 연결되어 인터넷과 ESP-NOW 통신을 병행할 수 있어서, 아마 WiFi 방식을 활용한 ESP32만의 기술이 있는 것 같다.
공유기에 연결하지 않고 ESP-NOW를 사용하는 방식과 공유기 연결 + ESP-NOW 방식을 둘 다 사용해봤을 땐, ESP-NOW만 사용하는 방식이 패킷 손실이 적고, 통신 거리가 비교적 멀리까지 되어서 이 부분은 조금 더 공부해야할 듯하다..
공유기를 함께 사용할 경우 특별히 통신할 모든 ESP32 소스에 채널을 고정해야 통신이 가능하다.
> Master는 현재 관리 중인 모든 Node 로부터 통신 정상 수신을 받았는지 여부 체크해야 함
Master의 노드 테이블에 100개 노드 ID가 등록되었다면, Sub-Master들은 Slave로부터 peer등록 여부를 100개 모두 받아서 Master에 보고해야 함.
1개 Slave에 N개의 Sub-Master를 Peer등록할 필요가 없으므로 이미 Peer가 등록됐다면 Sub-Master로부터 받는 추가적인 Peer 등록 요청 브로드캐스팅 통신을 무시하도록 로직 필요함(Peer == True : END / Peer == False : Update peer)
클라이언트가 작업 요청을 주면, Master↔Sub-Master↔Slave 점검 절차를 한 사이클 돌게 설계(중간에 노드가 초기화되서 등록된 Peer가 사라진다면? => 점검절차를 매 Job data 송신 때마다 수행? 이런식의 대응책 고민 필요)
N개의 브로드캐스팅 및 peer 유니캐스팅이 동시다발적일 경우 통신에 장애가 생기는지 실제로 해봐야 함
> 큐방식으로 한번에 몇개 상품까지 분류할 것인지와 상품들이 분류가되면 추가 큐를 넣어줄 수 있게 설계해야 함
> sub-Master는 ESP-NOW + WIFI 둘다 사용할 수 있어야 함(Flask 서버와 통신은 WIFI, Slave들과는 ESP-NOW)
> Slave Node Status 초기화(작업 마감)
기록
> ESP-NOW 브로드캐스팅으로 10m 정도 통신이 됨(사이에 벽은 3개 정도) . 15m까진 될 것 같음
Main Server, DAS Node 설계
■ Master : Flask Server
Data
Order data
Order Number
Item
Item Qty
Order SEQ
ETC
Node data
Node ID
Node Attribute(Sub-Master/Slave)
Location
Slave Node Routing Info
Func
Managing Node Data
Receivingorder data(From client)
Sending Job Queue(To Sub-Master) <= api 호출 or Mqtt 서버 발행 고민 중
설치했던 아두이노 IDE에 들어가서, 화면 상단에 File > Preferences를 클릭한다.
Additional boards manager URLs 옆에 파란 버튼을 클릭한다.
아까 복사했던 url을 붙여넣기 하고 OK버튼 클릭 & OK버튼 클릭
화면 상단에 Tools > Board > Boards Manager 클릭
왼쪽에 검색창이 뜨면, esp32 를 검색한다. 검색결과를 보면 "esp32 by Espressif Systems"로 된 파일의 INSTALL버튼을 누른다. 최신버전을 선택했는데, 호환성에 따라 과거버전을 받아야할 수도 있는지 버전 선택이 가능하다. 설치까지 꽤 긴 시간이 소요된다.
화면 상단에 Tools > Board > esp32 > WEMOS LOLIN32를 선택한다. 현재 내가 사용 중인 보드에 맞는 것을 고르면 된다.
다시 화면 상단에 Tools > Port > 본인의 ESP32와 연결된 port 선택("COM3"). 어떤 포트에 연결되어 있는지 확인하려면, 장치관리자에서 연결된 포트를 확인하면 된다.
지금까지 들어온 주문 데이터를 업로드하면, 오늘 총 예상 주문수량 그래프를 만들어주는 WEB
※ 대시보드 로직 0) 현재까지 주문 인입된 정보 excel 파일을 업로드 1) DB에 축적된 고객 별 시간 대 별 주문인입량을 조회 2) 조회한 시간까지 기준으로 가장 주문인입량이 비슷한 날을 찾음 3) 고객 별로 찾은 값들을 모두 합산함(시간 별로) 4) 그래프로 시간 별 주문 인입량을 표시 함
라이브러리
### <라이브러리 임포트>
from dash import Dash, dcc, html, dash_table
from dash.dependencies import Input, Output, State
import dash_bootstrap_components as dbc
import dash_uploader as du
import plotly.graph_objs as go
import datetime
import pymysql
import pandas as pd
import xlwings as xw
import os
import math
import numpy as np
import time