TỔNG QUAN VỀ ĐỀ TÀI1.1 Giới thiệu đề tài Phân loại sản phẩm sử dụng mã QR trong Appsheet là để tài thực hiện quét các mã QR trên sản phẩm để hiện lên thông tin sản phẩm.. Đề tài nãy sẽ s
Trang 1PHÂN LOẠI SẢN PHẨM BẰNG MÃ QR
DÙNG APPSHEET , CÓ CODE
Trang 2MỤC LỤC
Trang 33.3.2 Giao diện trên Google sheets 28
Trang 4DANH MỤC HÌNH VẼ
Trang 5DANH MỤC BẢNG BIỂU
Trang 6CÁC TỪ VIẾT TẮT
IOT: Internet of Things
Gsheet: Google sheets
Trang 7CHƯƠNG 1 TỔNG QUAN VỀ ĐỀ TÀI
1.1 Giới thiệu đề tài
Phân loại sản phẩm sử dụng mã QR trong Appsheet là để tài thực hiện quét các mã
QR trên sản phẩm để hiện lên thông tin sản phẩm Mỗi sản phẩm từ thức ăn đến đồdùng hiện nay đều có một mã QR code riêng Đề tài nãy sẽ sử dụng các mã QR đó
để có thể tính tiền các sản phẩm trong qua một bước đơn giản là quét sản phẩm quacamera Khi quét sản phẩm qua camera thì thông tin và giá của sản phẩm sẽ hiển thị
và đưa lên Appsheet Appsheets là một ứng dụng trên điện thoại giúp ta kiểm soát
dữ liệu từ Googsheets Đề tài này có thể sử dụng trong các cửa hàng hay siêu thịthậm chí là các hộ kinh doanh nhỏ Tất cả đều có thể sử dụng quét Qrcode để có thểtối ưu hóa thời gian và cũng giúp mọi người không cần phải nhớ giá từng sản phẩm.Tất cả đều được lưu trữ và xuất ra khi cần thiết Không những vậy đề tài này có thểứng dụng trong cơ quan trường học để điểm danh
1.2 Mục đích nghiên cứu
Ứng dụng Node-red để xây dựng chương trình quét mã code Sau đó sử dụngGoogsheets để lưu các dữ liệu để chương trình quét Kết nối Googsheets vớiAppsheet để có thể sử dụng trên cả điện thoại và có thể xem trên mọi thiết bị
1.3 Đối tượng nghiên cứu
- Node-red
- Googsheet
- Appsheet
- QRcode
Trang 81.4 Phạm vi nghiên cứu
Đề tài này chỉ nghiên cứu xây dựng Node-red để quét mã Qrcode và hiển thị trênAppsheet Giới hạn của đề tài chỉ sử dụng các mã Qrcode có sẵn
1.5 Dự kiến kết quả
Sau khi hoàn thành thì các mã Qrcode sau khi đưa qua camera sẽ được node-red xử
lý hình ảnh và sắp xếp vào các bảng googsheet sau đó hiển thị giá tiền của sản phẩmcũng như hiển thị tổng giá của các sản phẩm đã mua trong hóa đơn
1.6 Tổng quan về hệ thống
Đây là một hệ thống cơ bản của quét mã QR code Hệ thống được lập trình môphỏng trên Node-red kết hợp với Appsheet Các dữ liệu quét sẽ là các mã QR codeđược tạo nên từ các ứng dụng tạo QR thông dụng trên các Web Hệ thống có tínhthực tế cao nhưng cần phải phát triển thêm
Hệ thống quét mã QR tạo sẵn và đã lưu thông tin trên Gsheet Mã QR có thể đưavào từ 2 kênh Kênh thứ nhất là ESP32-CAM kết nối với hệ thống thông qua Wifi.Kênh thứ 2 là thông qua nút Inject của Node-RED Khi mã QR code được quét hoặcđưa vào thì các khối xử lý sẽ phân loại và đưa lên Gsheet Tại Gsheet chúng ta càiđặt các phép tính và khi dữ liệu được đưa lên Gsheet sẽ tự động tính toán theo côngthức đã cài đặt Sau đó sẽ xuất thông tin về lại Node-red Khi bấm xuất hóa đơn thìNode-RED sẽ sử dụng dữ liệu của Gsheet để đưa ra hóa đơn Khi xong 1 hóa đơnthì buộc phải làm mới lại dữ liệu của trang Gsheet hoặc nhấn nút Clear trên Node-RED Nếu không làm mới lại dữ liệu thì các hóa đơn sau sẽ bị tính chồng lên cáchóa đơn cũ khiến cho hóa đơn bị sai ( đây là điểm yếu của hệ thống)
Trang 9CHƯƠNG 2 CƠ SỞ LÝ THUYẾT
2.1 Giới thiệu NODE-RED
Node RED là một công cụ lập trình dùng để kết nối các thiết bị phần cứng, các dịch
vụ trực tuyến và API Đây là một công cụ trực quan được thiết kế cho IOT nhưngcũng có thể được sử dụng cho các ứng dụng khác nhằm liên kết nhanh các luồngdịch vụ khác nhau
Node-RED là mã nguồn mở và được phát triển bởi Emerging Technology Servicescủa IBM và được tích hợp trong gói ứng dụng khởi động IoT Bluemix của IBM.Hiện tại, Node-RED là một dự án của JS Foundation
Node-RED cho phép người dùng kết hợp các dịch vụ Web và phần cứng bằng cáchthay thế các tác vụ mã hóa cấp thấp phổ biến và điều này có thể được thực hiện vớigiao diện kéo thả trực quan Các thành phần khác nhau trong Node-RED được kếtnối với nhau để tạo ra một luồng Hầu hết mã lệnh cần thiết được tạo tự động
2-1 Logo Node-RED
Trang 102.2 Giới thiệu ESP32-CAM
2.2.1 Giới thiệu
2-2 ESP32-CAM ESP32 là một hệ thống vi điều khiển trên chip (SoC) giá rẻ của EspressifSystems, nhà phát triển của ESP8266 SoC Nó là sự kế thừa của SoCESP8266 và có cả hai biến thể lõi đơn và lõi kép của bộ vi xử lý 32-bitXtensa LX6 của Tensilica với Wi-Fi và Bluetooth tích hợp Module ESP32Camera là mạch tích hợp với bộ xử lý chính là module ESP32 + CameraOV2640 được sử dụng trong các ứng dụng truyền hình ảnh, xử lý ảnh quaWifi, Bluetooth hoặc các ứng dụng IoT
ESP32-CAM có thể được sử dụng rộng rãi trong các ứng dụng IoT thông minh như : Wireless video monitoring, WiFi image upload, QR
identification, v.v
ESP32-CAM có thể ứng dụng trong các mạng Sensor tiết kiệm điện năng
đến những ứng dụng yêu cầu độ phức tạp hơn rất nhiều, như giải mã đoạnMP3 đến mã hóa các loại âm thanh,…
2.2.2 Thông số kĩ thuật
Trang 11RAM 520KB SRAM + 4MB PSRAM
+ Hỗ trợ camera OV2640(bán kèm theo board)
+ JPEG(chỉ hỗ trợ OV2640), BMP,GRAYSCALE
+ Bật đèn flash và bật độ sáng tối đa: 310mA@5V
Môi trường bảo quản -40 ℃ ~ 90 ℃ , < 90%RH
2.1 Thông số của ESP32
Trang 122.2.3 Đặc điểm tính năng
● Tích hợp module ESP32-S trên board mạch, hỗ trợ WiFi + Bluetooth
● Camera OV2640 có đèn flash
● Khe cắm thẻ TF trên board mạch, hỗ trợ thẻ nhớ TF lên đến 4G để lưutrữ dữ liệu
● Hỗ trợ WiFi video monitoring and WiFi image upload
● Hỗ trợ multi sleep modes, dòng sleep sâu thấp tới 6mA
● Giao diện điều khiển có thể truy cập thông qua pinheader, dễ dàng tích hợp và nhúng vào các sản phẩm của người dùng
2.2.4 Cấu tạo và sơ đồ chân
2-3 Cấu tạo của ESP32
Trang 132-4 Sơ đồ chân ESP32
2.2.5 Thiết bị ngoại vi:
● 18 kênh chuyển đổi tương tự sang số (ADC)
● 3 giao diện SPI
● 3 giao diện UART
● 2 giao diện I2C
● 16 kênh đầu ra PWM
● 2 bộ chuyển đổi kỹ thuật số sang tương tự (DAC)
● 2 giao diện I2S
Trang 14● 10 GPIO cảm biến điện dun
và wifi dòng điện cần thiết lên đến tối đa 790mA
● Light Sleep : Đây là chế độ hoạt động khi tắt hết CPU, Wifi, BLE và RAM chúng được định mức clock Dòng tiêu thụ khoảng 0.8mA
● Deep Sleep : Đây là chế độ ngủ sâu Tất cả CPU, RAM và các cảm biến ngoại ngoại vi đều tắt Một số thành phần của chip vẫn được bật: ngoại vi RTC, bộ điều khiển RTC và RTC memories Dòng tiêu thụ 15µA 0.15mA
● Hibernate: Tất cả mọi thứ khác đều bị tắt Ngoại trừ một GPIO RTC đang hoạt động và bộ đếm thời gian RTC Chúng có trách nhiệm phụchồi đánh thức chip ra khỏi chế độ Hibernate
Trang 152.3 Giới thiệu về Google sheets
Google sheets là một chương trình bảng trính giống với Microsoft Exel nhưng làmột bộ phần mềm online được Google cung cấp trên Google Drive của mình.Google sheets có sắn dưới dạng ứng dụng cho cả máy tính và di động Ứng dụng cóthể giúp người dùng cùng các cộng sự xử lý dữ liệu online
2-5 Google Sheets
Trang 162.4 Giới thiệu về AppSheet
Appsheet là một công cụ tạoứng dụng của Google mà không cần mã code Bạn
có thể tạo một App với appsheet mà chỉ cần vài bước đơn giản liên kết vớiGooglesheets
2-6 Logo Appsheet
Trang 17CHƯƠNG 3 THIẾT KẾ VÀ THI CÔNG
3.1 Sơ đồ khối của hệ thống
Trang 183-1 Khối lệnh chính
Khối lệnh chính này có khối kết nối với ESP32- CAM, khối xử lý thông tin
mã QR và khối cập nhật dữ liệu lên bảng.
3-2 Khối lệnh Camera
Khối lệnh Camera này là khối kết nối với ESP32-CAM Khối này bao gồm 4 nút bật tắt camera bao gồm 2 nút cho Dashboard và 2 nút của lệnh node-red Sau khi bấm nút thì nút thì nút “Switch” sẽ chuyển kênh “change” 1 là bật và
“change” 2 là tắt Nút “camera” sẽ được liên kết với ESP32- Cam qua wifi Nút “iframe” là khối hiển thị camera ở Dashboard
Trang 193-3 Khối làm việcHình ảnh sẽ được đưa vào bằng camera hoặc hình ảnh trên máy tinh bằng cách bấm
“file inject” để thêm anh đã lưu trong máy tính Hình ảnh mã QR code sẽ được xử
lý và cập nhật dữ liệu lên bảng Google sheets
3-4 Khối xử lý thông tin lên GsheetĐây sẽ là khối đưa dữ liệu lên Gsheet
Trang 203-5 Thiết lập chọn ô sản phẩm trên Gsheet
Trang 21Tại khối switch sẽ cài tên các loại hàng Khi quét nếu “ Thịt heo” thì sẽ đưa vô cột
số đầu tiên Tương tự các mặt hàng khác khi quét sẽ tự đưa vào Tại các nút Gsheet
ta sẽ cài đặt các thứ tự để dữ liệu đưa vào
3-6 Thiết lập cập nhật dữ liệu trên Gsheet
Trang 22Như ở Gsheet đầu tiên sẽ cài đặt đưa dữ liệu vào sheet1!F9 Các vị trí này sẽ
do chúng ta cài đặt tương tự trên Gsheet Dữ liệu khi quét sẽ được tăng 1 bằng cách cài đặt code ở nút Function Tại nút fuction ta thiết lập Code
3-7 Khối xuất hóa đơnKhối này gồm 2 nút xuất hóa đơn Một nút của lệnh node-red và nút còn lại củaDashboard Sau khi bấm xuất hóa đơn thì chương trình sẽ cập nhập dữ liệu trênGsheet để hiển thị thành dạng bảng trên Dashboard Nút “table” là nút hiển thị dữliệu dạng bảng
Trang 233-8 Khối lệnh xóa dữ liệuKhối này khi bấm nút thì sẽ xóa toàn bộ dữ liệu đã thêm trong quá trình quét.
3.3 Thiết kế giao diện
3.3.1 Giao diện trên Node-RED Dashboard
3-9 Giao diện của DashboardĐây là màn hình làm việc chính của chương trình Gồm có các khung như camera,Hình ảnh quét và tên sản phẩm và ô hóa đơn
Trang 253-11 Khung hiển thị tên và hình ảnh đã quétHình ảnh sau khi được quét sẽ hiển thị tại khung này và hiển thị tên của sản phẩmvừa được quét.
Trang 263.3.2 Giao diện trên Google sheets
3-12 Giao diện Gsheet
Trang 273.3.3 Giao diện trên Appsheet
3-13 Giao diện chính trên AppsheetĐây là giao diện chính của Appsheet hiển thị các loại sản phẩm Các sản phẩm nàyđược liên kết từ Google Sheets
Trang 283-14 Giao diện sản phẩmGiao diện hiển thị sản phẩm ở đây gồm các thông tin của sản phẩn được liên kết từGsheet.
Trang 29CHƯƠNG 4 GIẢI THUẬT VÀ ĐIỀU KHIỂN
4.1 Hoạt động của hệ thống
Kết nối ESP32-CAM và bật Node-RED Dashboard Khi đưa mã QR của sản phẩmđến trước Camera thì Camera sẽ nhận hình ảnh mã QR code Sau khi nhận ảnhnode-RED sẽ xử lý hình ảnh chọn ô sản phẩm trên Gsheet và cập nhật dữ liệu tựđộng lên bảng Gsheet Tại node-red có các lệnh xử lý bảng đã cài đặt sẵn Sau khiquét xong các sản phẩm thì Gsheet sẽ tự động tính theo công thức đã cài đặt và đưa
ra số tiền cần thanh toán Bấm vào xuất hóa đơn thì chương trình sẽ xuất hóa đơngồm các sản phẩm đã mua và giá của sản phẩm cũng như giá của toàn hóa đơn Saukhi xong hóa đơn bấm vào clear để xóa hóa đơn cũ là quét lại các hóa đơn khác
4.2 Lưu đồ giải thuật
Trang 31B3: Kết nối ESP32-CAM với node-red.
B4: Bật ESP trên Dashboard
B5: Đưa mã Qrcode của sản phẩm trước camera
B5: Sau khi quét xong các sản phẩm bấn xuất hóa đơn
B6: Bấm Clear để xóa và làm lại hóa đơn mới
5.2 Kết quả thực nghiệm
Sau khi quét các mã Qrcode của sản phẩm thì phần mềm hiển thị thông tin và giácủa sản phẩm chính xác Giá trên hóa đơn của tất cả các sản phẩm cộng rất chínhxác và không có sai số
Trang 32CHƯƠNG 6 KẾT LUẬN
6.1 Ưu điểm
- Có thể tính toán giá thành sản phẩm nhanh hơn
- Có thể ghi nhớ giá của rất nhiều sản phẩm một cách chính xác
- In hóa đơn nhanh hơn
- Tỉ lệ lộn hóa đơn và giá là không có
- Có thể sử dụng ở khắp mọi nơi
- Có thể sử dụng trên nhiều phương tiện
- Dễ dàng sử dụng với mọi lứa tuổi
- Không bị sai số
6.2 Nhược điểm
- Sản phẩm quét phải được nhập thông tin từ trước
- Có độ trễ khi quét sản phẩm
- Chỉ giải quyết được mỗi lúc 1 hóa đơn
- Phải có kết nối mạng Internet
- Nguồn điện cho camera phải ổn định
Trang 33TÀI LIỆU THAM KHẢO
Trang 34PHỤ LỤC A CODE KẾT NỐI ESP32 VỚI CAMERA
Trang 35SemaphoreHandle_t frameSync = NULL;
QueueHandle_t streamingClients;
const int FPS = 14;
const int WSINTERVAL = 100;
void mjpegCB(void* pvParameters) {
Trang 36volatile size_t camSize;
volatile char* camBuf;
void camCB(void* pvParameters) {
TickType_t xLastWakeTime;
Trang 37const TickType_t xFrequency = pdMS_TO_TICKS(1000 / FPS);
portMUX_TYPE xSemaphore = portMUX_INITIALIZER_UNLOCKED;
char* fbs[2] = { NULL, NULL };
Trang 38if ( eTaskGetState( tStream ) == eSuspended ) {
vTaskSuspend(NULL); // passing NULL means "suspend yourself" }
}
}
char* allocateMemory(char* aPtr, size_t aSize) {
if (aPtr != NULL) free(aPtr);
size_t freeHeap = ESP.getFreeHeap();
char* ptr = NULL;
if ( aSize > freeHeap * 2 / 3 ) {
if ( psramFound() && ESP.getFreePsram() > aSize ) {
Trang 39const char BOUNDARY[] = "\r\n 123456789000000000000987654321\r\n";const char CTNTTYPE[] = "Content-Type: image/jpeg\r\nContent-Length: ";
const int hdrLen = strlen(HEADER);
const int bdrLen = strlen(BOUNDARY);
const int cntLen = strlen(CTNTTYPE);
void handleJPGSstream(void)
Trang 40xQueueSend(streamingClients, (void *) &client, 0);
if ( eTaskGetState( tCam ) == eSuspended ) vTaskResume( tCam );
if ( eTaskGetState( tStream ) == eSuspended ) vTaskResume( tStream );}
void streamCB(void * pvParameters) {
Trang 41UBaseType_t activeClients = uxQueueMessagesWaiting(streamingClients);
Trang 42taskYIELD();
vTaskDelayUntil(&xLastWakeTime, xFrequency);
}
}
const char JHEADER[] = "HTTP/1.1 200 OK\r\n" \
"Content-disposition: inline; filename=capture.jpg\r\n" \ "Content-type: image/jpeg\r\n\r\n";
const int jhdLen = strlen(JHEADER);
Trang 45while (WiFi.status() != WL_CONNECTED)