Hướng dẫn sử dụng cảm biến vân tay as608

Cảm biến vân tay sử dụng cổng tiếp xúc UART TTL để tiếp xúc với những loại Vi điều khiển và tinh chỉnh, hoặc là liên kết trực tiếp với máy tính trải qua cáp USB .Nội dung chính

  • Ứng dụng của cảm biến vân tay
  • Ưu điểm của sản phẩm
  • Thông số kỹ thuật của cảm biến vân tay
  • Hướng dẫn sử dụng cảm biến vân tay
  • 1. Linh kiện cần thiết làm mạch cảm biến vân tay AS608 giao tiếp ESP8266
  • 1.1 Vi điều khiển ESP trong mạch cảm biến vân tay AS608 giao tiếp ESP8266
  • 1.2 Cảm biến cảm biến vân tay AS608 giao tiếp ESP8266
  • a. Giới thiệu cảm biến vân tay AS608 giao tiếp ESP8266
  • b. Thông số kỹ thuật cảm biến vân tay AS608
  • c. Ứng dụng cảm biến vân tay AS608
  • 1.3 Oled cho mạch cảm biến vân tay AS608 giao tiếp ESP8266
  • 2. Hướng dẫn đồ án cảm biến vân tay AS608 giao tiếp ESP8266 hiển thị LCD1602
  • Phần cứng
  • Phần mềm
  • 3. Hoạt động của mạch cảm biến vân tay AS608 giao tiếp ESP8266
  • 4. Cụ thể hoạt động của mạch cảm biến vân tay AS608 giao tiếp ESP8266:
  • Ngoài ra còn nhiều Phần và các môn khác
  • Sẽ còn các phần khác nữa nhé.
  • Video liên quan

Cảm biến vân tay này được tích hợp một nhân dùng để xử lý và nhận dạng vân tay ở phía trong. Thiết bị này sẽ tự động gán vân tay với một chuỗi dữ liệu và truyền ra ngoài qua giao tiếp UART. Điều này có nghĩa là gì? Nghĩa là bạn hoàn toàn không cần các thao tác phức tạp như xử lý hình ảnh, … Bạn chỉ cần phát lệnh đọc/ghi và so sánh chuỗi UART một cách đơn giản. Đây là thiết bị cảm biến vân tay arduino rất dễ sử dụng và lập trình.

Bạn đang đọc: Hướng dẫn sử dụng cảm biến vân tay as608

Ứng dụng của cảm biến vân tay

Cảm biến vân tay có năng lực lưu giữ nhiều vân tay cho 1 ID ( 1 người ). Thiết bị này rất thích hợp cho những ứng dụng như bảo mật thông tin, khóa cửa, … Sản phẩm cảm biến vân tay này được ứng dụng thoáng rộng, tương thích với toàn bộ những mạng lưới hệ thống nhận dạng vân tay từ cấp thấp cho đến cấp cao .
Một số ví dụ minh họa :

  • Dùng để khóa các thiết bị như két sắt, hộp súng và các khu vực an ninh khác bằng vân tay của chính mình
  • Ứng dụng trong các khu vực cần nhận dạng như hệ thống kiểm soát truy cập, IPC, máy POS ,…
  • Dùng để bảo mật và quản lý các khu vực như câu lạc bộ tư nhân, phần mềm quản lý,…

Ưu điểm của sản phẩm

Sản phẩm sẽ được hàn và gắn dây trước sẵn cho bạn. Bạn không cần phải tự hàn, gắn như trước nữa, chỉ cần cắm dây vào những module mà bạn muốn liên kết là xong. Nếu bạn muốn khám phá thêm về cách nối dây của cảm biến vân tay arduino, bạn hoàn toàn có thể tìm hiểu thêm sơ đồ sau :
Sơ đồ liên kết cảm biến vân tay – Arduino :

  • VCC – 5V
  • TX – RX
  • RX – TX
  • GND – GND

Thông số kỹ thuật của cảm biến vân tay

  • Điệp áp: nằm trong khoảng từ 3.6 đến 6.0VDC
  • Dòng điện tiêu thụ:  nhỏ hơn 120mA
  • Phương thức giao tiếp: UART
  • Độ an toàn: 5
  • Tỉ lệ chấp nhận sai (FAR):  dưới 0.001% (mức bảo mật 3)
  • Tỉ lệ từ chối sai (FRR): dưới 1.0% (mức bảo mật 3)
  • Sản phẩm này có thể lưu giữ lên đến 127 dấu vân tay khác nhau

Hướng dẫn sử dụng cảm biến vân tay

Bạn có thể xem hướng dẫn sử dụng của sản phẩm tại đây.

AS608 giao tiếp ESP8266 là dùng Cảm biến nhận dạng vân tay sử dụng giao tiếp UART TTL hoặc USB 1.1 để giao tiếp với Vi điều khiển hoặc kết nối trực tiếp với máy tính (thông qua mạch chuyển USB-UART hoặc giao tiếp USB 1.1).

Cảm biến nhận dạng vân tay được tích hợp nhân giải quyết và xử lý nhận dạng vân tay phía trong, tự động hóa gán vân tay với 1 chuỗi data và truyền qua tiếp xúc UART ra ngoài nên trọn vẹn không cần những thao tác giải quyết và xử lý hình ảnh, đơn thuần chỉ là phát lệnh đọc / ghi và so sánh chuỗi UART nên rất dễ sử dụng và lập trình .

Cảm biến nhận dạng vân tay có khả năng lưu nhiều vân tay cho 1 ID (1 người), thích hợp cho các ứng dụng bảo mật, khóa cửa, sinh trắc học,…

Liên hệ làm Đồ án và Mạch điện tử

Phone : 0967.551.477

Zalo    : 0967.551.477

FB      : Huỳnh Nhật Tùng

Email : 

Địa Chỉ: 171/25 Lê Văn Thọ, P8, Gò Vấp, Tp HCM

Chi tiết: Nhận làm mạch và đồ án Điện tử

1. Linh kiện cần thiết làm mạch cảm biến vân tay AS608 giao tiếp ESP8266

1.1 Vi điều khiển ESP trong mạch cảm biến vân tay AS608 giao tiếp ESP8266

a. Giới thiệu

Kít ESP8266 là kít tăng trưởng dựa trên nền chíp Wifi SoC ESP8266 với phong cách thiết kế thuận tiện sửa dụng vì tích hợp sẵn mạch nạp sử dụng chíp CP2102 trên borad. Bên trong ESP8266 có sẵn một lõi vi sử lý cho nên vì thế bạn hoàn toàn có thể trực tiếp lập trình cho ESP8266 mà không cần thêm bất kỳ con vi sử lý nào nữa. Hiện tại có hai ngôn từ hoàn toàn có thể lập trình cho ESP8266, sử dụng trực tiếp ứng dụng IDE của Arduino để lập trình với bộ thư viện riêng hoặc sử dụng ứng dụng node MCU
NodeMCU ESP8266 Lua CP2102 là kit tăng trưởng dựa trên nền chip Wifi SoC ESP8266 với phong cách thiết kế dễ sử dụng và đặc biệt quan trọng là hoàn toàn có thể sử dụng trực tiếp trình biên dịch của Arduino để lập trình và nạp code, điều này khiến việc sử dụng và lập trình những ứng dụng trên ESP8266 trở nên rất đơn thuần .
NodeMCU ESP8266 Lua CP2102 sử dụng chip nạp và tiếp xúc UART mới và không thay đổi nhất là CP2102 có năng lực tự nhận Driver trên toàn bộ những hệ điều hành quản lý Window và Linux, đây là phiên bản tăng cấp từ những phiên bản sử dụng IC nạp giá rẻ CH340 .

NodeMCU ESP8266 Lua CP2102 đã được ra chân đầy đủ nhất trong các Version của ESP8266 với 9 chân GPIO, 1 chân ADC, 1 giao tiếp UART, 1 giao tiếp SPI và hỗ trợ PWM.

Tính năng khác

Vi giải quyết và xử lý có rất nhiều loại mở màn từ 4 bit cho đến 32 bit, vi giải quyết và xử lý 4 bit lúc bấy giờ không còn nhưng vi giải quyết và xử lý 8 bit vẫn còn mặc dầu đã có vi giải quyết và xử lý 64 bit. Lý do sự sống sót của vi giải quyết và xử lý 8 bit là tương thích với một số ít nhu yếu tinh chỉnh và điều khiển trong công nghiệp. Các vi giải quyết và xử lý 32 bit, 64 bit thường sử dụng cho những máy tính vì khối lượng tài liệu của máy tính rất lớn nên cần những vi giải quyết và xử lý càng mạnh càng tốt .Các mạng lưới hệ thống tinh chỉnh và điều khiển trong công nghiệp sử dụng những vi giải quyết và xử lý 8 bit hay 16 bit như mạng lưới hệ thống điện của xe hơi, mạng lưới hệ thống điều hòa, mạng lưới hệ thống tinh chỉnh và điều khiển những dây chuyền sản xuất sản xuất, …

b. Chức năng của Arduino R3:

Chúng ta biết rằng ở mỗi chân trên vi điều khiển và tinh chỉnh hoàn toàn có thể triển khai nhiều tính năng khác nhau, NodeMCU có tổng số 13 chân GPIO tuy nhiên 1 số ít chân được dùng cho những mục tiêu quan trọng khác thế cho nên tất cả chúng ta phải chú ý quan tâm khi sử dụng như sau :

  • Tất cả những GPIO đều có trở kéo lên nguồn bên trong ( ngoại trừ GPIO16 có trở kéo xuống GND ). Người dùng hoàn toàn có thể thông số kỹ thuật kích hoạt hoặc không kích hoạt trở kéo này .
  • GPIO1 và GPIO3 : hai GPIO này được nối với TX và RX của bộ UART0, NodeMCU nạp code trải qua bộ UART này nên tránh sử dụng 2 chân GPIO này .
  • GPIO0, GPIO2, GPIO15 : đây là những chân có trách nhiệm thông số kỹ thuật mode cho ESP8266 điều khiển và tinh chỉnh quy trình nạp code nên bên trong NodeMCU ( có tên gọi là strapping pins ) có những trở kéo để định sẵn mức logic cho chúng như sau : GPIO0 : HIGH, GPIO2 : HIGH, GPIO15 : LOW. Vì vậy khi muốn sử dụng những chân này ở vai trò GPIO cần phải phong cách thiết kế một nguyên tắc riêng để tránh xung đột đến quy trình nạp code. Các bạn hoàn toàn có thể tìm hiểu thêm nguyên tắc phong cách thiết kế mạch
  • GPIO9, GPIO10 : hai chân này được dùng để tiếp xúc với External Flash của ESP8266 thế cho nên cũng không hề dùng được ( đã test thực nghiệm ) .

Như vậy, những GPIO còn lại : GPIO 4, 5, 12, 13, 14, 16 hoàn toàn có thể sử dụng thông thường .

  • Chip : ESP8266EX SoC Wifi
  • Băng tần WiFi : 2.4 GHz chuẩn 802.11 b / g / n
  • Phiên bản firmware : NodeMCU V1. 0
  • Điện áp hoạt động giải trí : 3.3 V
  • Điện áp vào : 5V
  • Số chân I / O : 11 ( toàn bộ những chân I / O đều có Interrupt / PWM / I2C / One-wire, trừ chân D0 )
  • Số chân Analog Input : 1 ( điện áp vào tối đa 3.3 V )
  • Bộ nhớ Flash : 4MB
  • Chip tiếp xúc UART : CP2102
  • Giao tiếp : Cable Micro USB
  • Hỗ trợ bảo mật thông tin : WPA / WPA2
  • Tích hợp giao thức TCP / IP
  • Lập trình trên những ngôn từ : C / C + +, Micropython, NodeMCU – Lua
  • LED: Có 1 LED được tích hợp trên bảng mạch và được nối vào chân D16. Khi chân có giá trị mức cao (HIGH) thì LED sẽ sáng và LED tắt khi ở mức thấp (LOW).

  • VIN: Chân này dùng để cấp nguồn ngoài (điện áp cấp từ 5VDC).

  • 3V3: Điện áp ra 3.3V (dòng điện trên mỗi chân này tối đa là 50mA).

  • GND: Là chân mang điện cực âm trên board.

  • IOREF: Điệp áp hoạt động của vi điều khiển trên ESP8266 và có thể đọc điện áp trên chân IOREF. Chân IOREF không dùng để làm chân cấp nguồn.

Vi điều khiển và tinh chỉnh ATmega328 :

  • 32 KB bộ nhớ Plash: trong đó bootloader chiếm 0.5KB.

  • 2 KB cho SRAM: (Static Random Access Menory): giá trị các biến khai báo sẽ được lưu ở đây. Khai báo càng nhiều biến thì càng tốn nhiều bộ nhớ RAM. Khi mất nguồn dữ liệu trên SRAM sẽ bị mất.

  • 1 KB cho EEPROM: (Electrically Eraseble Programmable Read Only Memory): Là nơi có thể đọc và ghi dữ liệu vào đây và không bị mất dữ liệu khi mất nguồn.

f .Các chân đầu vào và đầu ra

Trên Board ESP8266 Node MCU có các chân Digital được sử dụng để làm chân đầu vào và đầu ra và chúng sử dụng các hàm pinMode(), digitalWrite(), digitalRead(). Giá trị điện áp trên mỗi chân là 5V, dòng trên mỗi chân là 20mA và bên trong có điện trở kéo lên là 20-50 ohm. Dòng tối đa trên mỗi chân I/O không vượt quá 40mA để tránh trường hợp gây hỏng board mạch.

Ngoài ra, một số ít chân Digital có tính năng đặt biệt :

  • Serial: 0 (RX) và 1 (TX): Được sử dụng để nhận dữ liệu (RX) và truyền dữ liệu (TX) TTL.

  • PWM: Từ D1 – D7 đều có chức năng PWM.

  • SPI:  D7 (MOSI), D6 (MISO), D5 (SCK). Các chân này hỗ trợ giao tiếp SPI bằng thư viện SPI.

  • LED: Có 1 LED được tích hợp trên bảng mạch và được nối vào chân D0. Khi chân có giá trị mức cao (HIGH) thì LED sẽ sáng và LED tắt khi ở mức thấp (LOW).

  • TWI/I2C: D2 (SDA) và D1 (SCL) hỗ trợ giao tiếp I2C/TWI với các thiết bị khác.

g .Các chân không khởi động được khi

Chân ký thiệu thực tiễn Chân GPIO Không được cho phép khi khơi động
D0 GPIO16 Lỗi nếu kéo xuống thấp
D3 GPIO0 Lỗi nếu kéo xuống thấp
D4 GPIO2 Lỗi khi kéo xuống thấp
D8 GPIO15 Lỗi khi kéo lên cao

1.2 Cảm biến cảm biến vân tay AS608 giao tiếp ESP8266

a. Giới thiệu cảm biến vân tay AS608 giao tiếp ESP8266

Cảm biến nhận dạng vân tay sử dụng giao tiếp UART TTL hoặc USB 1.1 để giao tiếp với Vi điều khiển hoặc kết nối trực tiếp với máy tính (thông qua mạch chuyển USB-UART hoặc giao tiếp USB 1.1).

Cảm biến nhận dạng vân tay được tích hợp nhân giải quyết và xử lý nhận dạng vân tay phía trong, tự động hóa gán vân tay với 1 chuỗi data và truyền qua tiếp xúc UART ra ngoài nên trọn vẹn không cần những thao tác giải quyết và xử lý hình ảnh, đơn thuần chỉ là phát lệnh đọc / ghi và so sánh chuỗi UART nên rất dễ sử dụng và lập trình .

Cảm biến nhận dạng vân tay có khả năng lưu nhiều vân tay cho 1 ID (1 người), thích hợp cho các ứng dụng bảo mật, khóa cửa, sinh trắc học,…

Khu vực ứng dụng : Mô-đun vân tay được sử dụng thoáng rộng, tương thích với toàn bộ những mạng lưới hệ thống nhận dạng vân tay từ hạng sang đến thấp cấp .

b. Thông số kỹ thuật cảm biến vân tay AS608

  • Tên mẫu sản phẩm : Module nhận dạng vân tay quang học AS608, Cảm biến vân tay AS608 …
  • Điện áp cung ứng : DC 3.8 ~ 7.0 V
  • Ánh sáng : ánh sáng dài / nhấp nháy
  • Dòng hoạt động giải trí hiện tại : < 60 mA
  • Thời gian nhập vân tay : < 0,5 giây
  • Diện tích phẩn cảm biến : 15 × 17 mm
  • Phương pháp so khớp : Phương pháp so sánh ( 1 : 1 ) Phương pháp tìm kiếm ( 1 : N )
  • Lưu trữ vân tay : 240 vân tay
  • Mức độ bảo đảm an toàn : 3 ( từ thấp đến cao : 1,2,3,4,5 )
  • Tỷ lệ gật đầu sai ( FAR ) : < 0,001 % ( Mức bảo đảm an toàn 3 )
  • Tỷ lệ khước từ ( FRR ) : < 1,0 % ( mức bảo mật thông tin là 3 )
  • Thời gian tìm kiếm : < 220 ms ( trung bình 1 : 240 )
  • Giao tiếp : UART ( mức logic TTL )
  • Tốc độ baud ( UART ) : ( 9600 × N ) bps Trong đó N = 1 ~ 12 ( mặc định N = 6, tức là 57600 bps )
  • Giao tiếp với bất kể vi tinh chỉnh và điều khiển nào có cổng tiếp nối đuôi nhau : ví dụ điển hình như Arduino, 51, avr, stm32, pic, arm, msp430
  • Nhiều công dụng : tích lũy dấu vân tay, ĐK dấu vân tay, so sánh dấu vân tay và tìm kiếm dấu vân tay

c. Ứng dụng cảm biến vân tay AS608

  • Khóa vân tay, két sắt, hộp súng, kinh tế tài chính và những khu vực bảo mật an ninh khác ;
  • Các nghành nghề dịch vụ nhận dạng như mạng lưới hệ thống trấn áp truy vấn, IPC, máy POS, huấn luyện và đào tạo lái xe và tham gia ;
  • Các khu vực quản trị như câu lạc bộ tư nhân, ứng dụng quản trị và cấp phép .
  • Người nhận Medicare, người nhận tiền hưu trí, giao dịch thanh toán bằng vân tay và những nghành nghề dịch vụ kinh tế tài chính khác .
  • Câu lạc bộ tư nhân, ứng dụng quản trị, cấp phép và những nghành quản trị khác ;
  • Trong những mạng lưới hệ thống khóa cửa vân tay, két sắt, khu vực kinh tế tài chính và bảo mật an ninh khác ;
  • Hệ thống trấn áp ra vào, máy tính công nghiệp, huấn luyện và đào tạo lái xe, chấm công và những nghành nhận dạng khác ;

1.3 Oled cho mạch cảm biến vân tay AS608 giao tiếp ESP8266

a. Giới thiệu

Màn hình Oled 1.3 inch tiếp xúc I2C cho năng lực hiển thị đẹp, sang chảnh, rõ nét vào ban ngày và năng lực tiết kiệm ngân sách và chi phí nguồn năng lượng tối đa với mức ngân sách tương thích, màn hình hiển thị sử dụng tiếp xúc I2C cho chất lượng đường truyền không thay đổi và rất dễ tiếp xúc chỉ với 2 chân GPIO .
Màn hình OLED SH1106 với size 1.3 inch, cho năng lực hiển thị hình ảnh tốt với khung hình 128 × 64 px. Ngoài ra, màn hình hiển thị còn thích hợp với hầu hết những vi tinh chỉnh và điều khiển lúc bấy giờ trải qua tiếp xúc SPI. Màn hình sử dụng driver SH1106 cùng phong cách thiết kế nhỏ gọn sẽ giúp bạn tăng trưởng những mẫu sản phẩm DIY hoặc những ứng dụng khác một cách nhanh gọn .

Màn hình Oled chuẩn truyền I2C

Màn hình Oled chuẩn truyền SPI

b. Thông số kỹ thuật

  • Điện áp sử dụng : 2.2 ~ 5.5 VDC
  • Công suất tiêu thụ : 0.04 w
  • Góc hiển thị : lớn hơn 160 độ
  • Số điểm hiển thị : 128 × 64 điểm .
  • Độ rộng màn hình hiển thị : 1.3 inch .
  • Màu hiển thị : Trắng / Xanh Dương .
  • Giao tiếp : I2C hoặc SPI tùy loại
  • Driver : SH1106
  • Kích thước 1.3 inch ( 128×64 px )
  • Góc nhìn tối đa : 160 °
  • Nhiệt độ thao tác : – 30 ° V đến 80 °C
  • Tương thích với hầu hết những board như : Arduino, ESP8266, ESP32, STM32 ,

Lưu ý khi dùng Oled 1.3in

Hiện trên thị trường sẽ có:
+  2 loại chính là 0.96in1.3in
+  2 mã số là SH1106SH1306
+  2 chuẩn truyền SPII2C

Vì thế việc lựa chọn đúng đối tượng người dùng để lập trình mới hoàn toàn có thể hiển thị được thông tin mong ước .

2. Hướng dẫn đồ án cảm biến vân tay AS608 giao tiếp ESP8266 hiển thị LCD1602

Phần cứng

Phần mềm

//*******************************libraries******************************** #include #include #include #include #include #include #include #include           //https://github.com/adafruit/Adafruit-GFX-Library #include       //https://github.com/adafruit/Adafruit_SSD1306 #include   //https://github.com/adafruit/Adafruit-Fingerprint-Sensor-Library //************************************************************************ //Fingerprint scanner Pins #define Finger_Rx 14 //D5 #define Finger_Tx 12 //D6 // Declaration for SSD1306 display connected using software I2C #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels #define OLED_RESET     0 // Reset pin # (or -1 if sharing Arduino reset pin) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); //************************************************************************ SoftwareSerial mySerial(Finger_Rx, Finger_Tx); Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial); //************************************************************************ /* Set these to your desired credentials. */ const char *ssid = “SSID”;  //ENTER YOUR WIFI SETTINGS const char *password = “password”; //************************************************************************ String postData ; // post array that will be send to the website String link = “http://YourComputerIP/biometricattendance/getdata.php”; //computer IP or the server domain int FingerID = 0;     // The Fingerprint ID from the scanner uint8_t id; //*************************Biometric Icons********************************* #define Wifi_start_width 54 #define Wifi_start_height 49 const uint8_t PROGMEM Wifi_start_bits[] = {   0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x1f,0xf0,0x00,0x00,0x00 ,0x00,0x03,0xff,0xff,0x80,0x00,0x00 ,0x00,0x1f,0xf0,0x1f,0xf0,0x00,0x00 ,0x00,0x7e,0x00,0x00,0xfc,0x00,0x00 ,0x01,0xf0,0x00,0x00,0x1f,0x00,0x00 ,0x03,0xc0,0x00,0x00,0x07,0xc0,0x00 ,0x0f,0x00,0x00,0x00,0x01,0xe0,0x00 ,0x1c,0x00,0x00,0x00,0x00,0x70,0x00 ,0x38,0x00,0x07,0xc0,0x00,0x38,0x00 ,0x70,0x00,0xff,0xfe,0x00,0x1e,0x00 ,0xe0,0x03,0xfc,0x7f,0xc0,0x0e,0x00 ,0x00,0x1f,0x80,0x03,0xf0,0x00,0x00 ,0x00,0x3c,0x00,0x00,0x78,0x00,0x00 ,0x00,0xf0,0x00,0x00,0x1c,0x00,0x00 ,0x01,0xe0,0x00,0x00,0x0c,0x00,0x00 ,0x03,0x80,0x00,0x00,0x00,0x00,0x00 ,0x03,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x3f,0xf8,0x07,0x1e,0x00 ,0x00,0x00,0xff,0xfe,0x1f,0xbf,0x80 ,0x00,0x03,0xe0,0x04,0x7f,0xff,0xc0 ,0x00,0x07,0x80,0x00,0xff,0xff,0xe0 ,0x00,0x0e,0x00,0x00,0xff,0xff,0xe0 ,0x00,0x0c,0x00,0x00,0x7f,0xff,0xc0 ,0x00,0x00,0x00,0x00,0xfe,0x07,0xe0 ,0x00,0x00,0x00,0x03,0xf8,0x03,0xf8 ,0x00,0x00,0x07,0xe7,0xf9,0xf1,0xfc ,0x00,0x00,0x1f,0xe7,0xf1,0xf9,0xfc ,0x00,0x00,0x1f,0xe7,0xf3,0xf9,0xfc ,0x00,0x00,0x3f,0xe7,0xf3,0xf9,0xfc ,0x00,0x00,0x3f,0xe7,0xf1,0xf1,0xfc ,0x00,0x00,0x3f,0xe3,0xf8,0xe3,0xfc ,0x00,0x00,0x3f,0xf3,0xfc,0x07,0xf8 ,0x00,0x00,0x1f,0xf0,0x7f,0x0f,0xc0 ,0x00,0x00,0x0f,0xe0,0x7f,0xff,0xe0 ,0x00,0x00,0x07,0xc0,0xff,0xff,0xe0 ,0x00,0x00,0x00,0x00,0x7f,0xff,0xe0 ,0x00,0x00,0x00,0x00,0x3f,0xff,0x80 ,0x00,0x00,0x00,0x00,0x1f,0xbf,0x00 ,0x00,0x00,0x00,0x00,0x03,0x18,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }; #define Wifi_connected_width 63 #define Wifi_connected_height 49 const uint8_t PROGMEM Wifi_connected_bits[] = {   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x03,0xff,0xff,0x80,0x00,0x00 ,0x00,0x00,0x3f,0xff,0xff,0xf8,0x00,0x00 ,0x00,0x01,0xff,0xff,0xff,0xff,0x00,0x00 ,0x00,0x0f,0xff,0xff,0xff,0xff,0xe0,0x00 ,0x00,0x3f,0xff,0xc0,0x07,0xff,0xf8,0x00 ,0x00,0xff,0xf8,0x00,0x00,0x3f,0xfe,0x00 ,0x03,0xff,0x80,0x00,0x00,0x03,0xff,0x80 ,0x07,0xfe,0x00,0x00,0x00,0x00,0xff,0xc0 ,0x1f,0xf8,0x00,0x00,0x00,0x00,0x3f,0xf0 ,0x3f,0xe0,0x01,0xff,0xff,0x00,0x0f,0xf8 ,0x7f,0x80,0x0f,0xff,0xff,0xe0,0x03,0xfc ,0xff,0x00,0x7f,0xff,0xff,0xfc,0x01,0xfe ,0xfc,0x01,0xff,0xff,0xff,0xff,0x00,0x7e ,0x78,0x07,0xff,0xc0,0x07,0xff,0xc0,0x3c ,0x00,0x0f,0xfc,0x00,0x00,0x7f,0xe0,0x00 ,0x00,0x1f,0xf0,0x00,0x00,0x1f,0xf0,0x00 ,0x00,0x3f,0xc0,0x00,0x00,0x07,0xf8,0x00 ,0x00,0x7f,0x00,0x01,0x00,0x01,0xfc,0x00 ,0x00,0x7e,0x00,0x7f,0xfc,0x00,0xfc,0x00 ,0x00,0x3c,0x03,0xff,0xff,0x80,0x78,0x00 ,0x00,0x00,0x07,0xff,0xff,0xc0,0x00,0x00 ,0x00,0x00,0x1f,0xff,0xff,0xf0,0x00,0x00 ,0x00,0x00,0x3f,0xf0,0x1f,0xf8,0x00,0x00 ,0x00,0x00,0x3f,0x80,0x03,0xf8,0x00,0x00 ,0x00,0x00,0x3f,0x00,0x01,0xf8,0x00,0x00 ,0x00,0x00,0x1c,0x00,0x00,0x70,0x00,0x00 ,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x0f,0xe0,0x00,0x00,0x00 ,0x00,0x00,0x00,0x1f,0xf0,0x00,0x00,0x00 ,0x00,0x00,0x00,0x3f,0xf8,0x00,0x00,0x00 ,0x00,0x00,0x00,0x3f,0xf8,0x00,0x00,0x00 ,0x00,0x00,0x00,0x3f,0xf8,0x00,0x00,0x00 ,0x00,0x00,0x00,0x3f,0xf8,0x00,0x00,0x00 ,0x00,0x00,0x00,0x1f,0xf0,0x00,0x00,0x00 ,0x00,0x00,0x00,0x0f,0xe0,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }; #define FinPr_start_width 64 #define FinPr_start_height 64 const uint8_t PROGMEM FinPr_start_bits[] = {   0x00,0x00,0x00,0x1f,0xe0,0x00,0x00,0x00 ,0x00,0x00,0x01,0xff,0xfe,0x00,0x00,0x00 ,0x00,0x00,0x03,0xff,0xff,0x80,0x00,0x00 ,0x00,0x00,0x0f,0xc0,0x0f,0xe0,0x00,0x00 ,0x00,0x00,0x1f,0x00,0x01,0xf8,0x00,0x00 ,0x00,0x00,0x3c,0x00,0x00,0x7c,0x00,0x00 ,0x00,0x00,0x78,0x00,0x00,0x3e,0x00,0x00 ,0x00,0x00,0xf0,0x3f,0xf8,0x0f,0x00,0x00 ,0x00,0x01,0xe0,0xff,0xfe,0x07,0x80,0x00 ,0x00,0x03,0xc3,0xff,0xff,0x03,0x80,0x00 ,0x00,0x03,0x87,0xc0,0x07,0xc3,0xc0,0x00 ,0x00,0x07,0x0f,0x00,0x03,0xe1,0xc0,0x00 ,0x00,0x0f,0x0e,0x00,0x00,0xe0,0xe0,0x00 ,0x00,0x0e,0x1c,0x00,0x00,0xf0,0xe0,0x00 ,0x00,0x0c,0x3c,0x1f,0xe0,0x70,0xe0,0x00 ,0x00,0x00,0x38,0x3f,0xf0,0x38,0x70,0x00 ,0x00,0x00,0x78,0x78,0xf8,0x38,0x70,0x00 ,0x00,0x00,0x70,0x70,0x3c,0x18,0x70,0x00 ,0x00,0x00,0xe0,0xe0,0x1e,0x1c,0x70,0x00 ,0x00,0x03,0xe1,0xe0,0x0e,0x1c,0x70,0x00 ,0x00,0x0f,0xc1,0xc3,0x0e,0x1c,0x70,0x00 ,0x00,0x3f,0x03,0xc3,0x8e,0x1c,0x70,0x00 ,0x00,0x3e,0x03,0x87,0x0e,0x1c,0x70,0x00 ,0x00,0x30,0x07,0x07,0x0e,0x18,0xe0,0x00 ,0x00,0x00,0x0e,0x0e,0x0e,0x38,0xe0,0x00 ,0x00,0x00,0x3e,0x1e,0x1e,0x38,0xe0,0x00 ,0x00,0x00,0xf8,0x1c,0x1c,0x38,0xe0,0x00 ,0x00,0x03,0xf0,0x38,0x3c,0x38,0xe0,0x00 ,0x00,0x3f,0xc0,0xf8,0x78,0x38,0xe0,0x00 ,0x00,0x7f,0x01,0xf0,0x70,0x38,0xf0,0x00 ,0x00,0x78,0x03,0xe0,0xe0,0x38,0x70,0x00 ,0x00,0x00,0x0f,0x81,0xe0,0x38,0x7c,0x00 ,0x00,0x00,0x3f,0x03,0xc0,0x38,0x3e,0x00 ,0x00,0x00,0xfc,0x0f,0x80,0x38,0x1e,0x00 ,0x00,0x07,0xf0,0x1f,0x1c,0x1c,0x04,0x00 ,0x00,0x3f,0xc0,0x3e,0x3f,0x1e,0x00,0x00 ,0x00,0x7f,0x00,0xf8,0x7f,0x0f,0x00,0x00 ,0x00,0x38,0x01,0xf0,0xf7,0x07,0xc0,0x00 ,0x00,0x00,0x07,0xe1,0xe3,0x83,0xf8,0x00 ,0x00,0x00,0x3f,0x87,0xc3,0xc0,0xfc,0x00 ,0x00,0x01,0xfe,0x0f,0x81,0xe0,0x3c,0x00 ,0x00,0x0f,0xf8,0x1f,0x00,0xf0,0x00,0x00 ,0x00,0x1f,0xc0,0x7c,0x00,0x7c,0x00,0x00 ,0x00,0x1e,0x01,0xf8,0x00,0x3f,0x00,0x00 ,0x00,0x00,0x07,0xe0,0x78,0x0f,0xc0,0x00 ,0x00,0x00,0x3f,0x81,0xfe,0x07,0xf0,0x00 ,0x00,0x01,0xfe,0x07,0xff,0x01,0xf0,0x00 ,0x00,0x07,0xf8,0x0f,0x87,0x80,0x30,0x00 ,0x00,0x07,0xc0,0x3f,0x03,0xe0,0x00,0x00 ,0x00,0x06,0x00,0xfc,0x01,0xf8,0x00,0x00 ,0x00,0x00,0x03,0xf0,0x00,0x7e,0x00,0x00 ,0x00,0x00,0x0f,0xc0,0x00,0x3f,0x80,0x00 ,0x00,0x00,0x7f,0x00,0xf8,0x0f,0x80,0x00 ,0x00,0x00,0xfc,0x03,0xfe,0x01,0x80,0x00 ,0x00,0x00,0xf0,0x1f,0xff,0x80,0x00,0x00 ,0x00,0x00,0x00,0x7f,0x07,0xe0,0x00,0x00 ,0x00,0x00,0x00,0xfc,0x03,0xf8,0x00,0x00 ,0x00,0x00,0x03,0xf0,0x00,0x78,0x00,0x00 ,0x00,0x00,0x0f,0xc0,0x00,0x18,0x00,0x00 ,0x00,0x00,0x0f,0x01,0xf8,0x00,0x00,0x00 ,0x00,0x00,0x00,0x07,0xfe,0x00,0x00,0x00 ,0x00,0x00,0x00,0x1f,0xfe,0x00,0x00,0x00 ,0x00,0x00,0x00,0x1e,0x0e,0x00,0x00,0x00 ,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00 }; //————————————————————— #define FinPr_valid_width 64 #define FinPr_valid_height 64 const uint8_t PROGMEM FinPr_valid_bits[] = {   0x00,0x00,0x03,0xfe,0x00,0x00,0x00,0x00 ,0x00,0x00,0x1f,0xff,0xe0,0x00,0x00,0x00 ,0x00,0x00,0x7f,0xff,0xf8,0x00,0x00,0x00 ,0x00,0x00,0xfc,0x00,0xfe,0x00,0x00,0x00 ,0x00,0x03,0xe0,0x00,0x1f,0x00,0x00,0x00 ,0x00,0x07,0xc0,0x00,0x07,0x80,0x00,0x00 ,0x00,0x0f,0x80,0x00,0x03,0xe0,0x00,0x00 ,0x00,0x0e,0x03,0xff,0x01,0xe0,0x00,0x00 ,0x00,0x1c,0x1f,0xff,0xe0,0xf0,0x00,0x00 ,0x00,0x3c,0x3f,0xff,0xf0,0x78,0x00,0x00 ,0x00,0x78,0x7c,0x00,0xf8,0x3c,0x00,0x00 ,0x00,0x70,0xf0,0x00,0x3c,0x1c,0x00,0x00 ,0x00,0xe1,0xe0,0x00,0x1e,0x1c,0x00,0x00 ,0x00,0xe1,0xc0,0x00,0x0f,0x0e,0x00,0x00 ,0x00,0xc3,0x81,0xfc,0x07,0x0e,0x00,0x00 ,0x00,0x03,0x83,0xff,0x07,0x8e,0x00,0x00 ,0x00,0x07,0x07,0x8f,0x83,0x87,0x00,0x00 ,0x00,0x0f,0x0f,0x03,0xc3,0x87,0x00,0x00 ,0x00,0x1e,0x0e,0x01,0xc3,0x87,0x00,0x00 ,0x00,0x3c,0x1c,0x00,0xe1,0x87,0x00,0x00 ,0x00,0xf8,0x1c,0x30,0xe1,0x87,0x00,0x00 ,0x07,0xf0,0x38,0x70,0xe1,0x86,0x00,0x00 ,0x07,0xc0,0x78,0x70,0xe3,0x8e,0x00,0x00 ,0x02,0x00,0xf0,0xf0,0xe3,0x8e,0x00,0x00 ,0x00,0x01,0xe0,0xe0,0xe3,0x8e,0x00,0x00 ,0x00,0x03,0xc1,0xe1,0xc3,0x8e,0x00,0x00 ,0x00,0x0f,0x83,0xc3,0xc3,0x8e,0x00,0x00 ,0x00,0x7f,0x07,0x83,0x83,0x0e,0x00,0x00 ,0x07,0xfc,0x0f,0x07,0x83,0x0e,0x00,0x00 ,0x07,0xf0,0x1e,0x0f,0x03,0x0e,0x00,0x00 ,0x07,0x80,0x7c,0x1e,0x03,0x07,0x00,0x00 ,0x00,0x00,0xf8,0x3c,0x03,0x87,0x80,0x00 ,0x00,0x03,0xf0,0x78,0x03,0x83,0xc0,0x00 ,0x00,0x1f,0xc0,0xf0,0x02,0x00,0x00,0x00 ,0x00,0xff,0x01,0xe1,0xc0,0x0c,0x00,0x00 ,0x07,0xfc,0x03,0xc3,0xe1,0xff,0xc0,0x00 ,0x07,0xe0,0x0f,0x87,0xc7,0xff,0xf0,0x00 ,0x07,0x00,0x3f,0x0f,0x0f,0xff,0xfc,0x00 ,0x00,0x00,0x7c,0x3e,0x3f,0xff,0xfe,0x00 ,0x00,0x03,0xf8,0x7c,0x3f,0xff,0xff,0x00 ,0x00,0x1f,0xe0,0xf0,0x7f,0xff,0xff,0x80 ,0x00,0xff,0x83,0xe0,0xff,0xff,0xff,0x80 ,0x01,0xfc,0x07,0xc1,0xff,0xff,0xe3,0xc0 ,0x01,0xe0,0x1f,0x01,0xff,0xff,0xc3,0xc0 ,0x00,0x00,0xfe,0x01,0xff,0xff,0x87,0xe0 ,0x00,0x03,0xf8,0x13,0xff,0xff,0x0f,0xe0 ,0x00,0x1f,0xe0,0x73,0xff,0xfe,0x1f,0xe0 ,0x00,0x7f,0x81,0xf3,0xff,0xfc,0x1f,0xe0 ,0x00,0xfc,0x03,0xe3,0xef,0xf8,0x3f,0xe0 ,0x00,0x60,0x0f,0xc3,0xc7,0xf0,0x7f,0xe0 ,0x00,0x00,0x3f,0x03,0xc3,0xe0,0xff,0xe0 ,0x00,0x00,0xfc,0x03,0xc1,0xc1,0xff,0xe0 ,0x00,0x07,0xf0,0x13,0xe0,0x83,0xff,0xe0 ,0x00,0x0f,0xc0,0x7b,0xf8,0x07,0xff,0xe0 ,0x00,0x0f,0x01,0xf9,0xfc,0x0f,0xff,0xc0 ,0x00,0x00,0x07,0xf1,0xfe,0x1f,0xff,0xc0 ,0x00,0x00,0x1f,0xc0,0xff,0x3f,0xff,0x80 ,0x00,0x00,0x7e,0x00,0xff,0xff,0xff,0x80 ,0x00,0x00,0xfc,0x00,0x7f,0xff,0xff,0x00 ,0x00,0x00,0xf0,0x1f,0x3f,0xff,0xfe,0x00 ,0x00,0x00,0x00,0x7f,0x1f,0xff,0xfc,0x00 ,0x00,0x00,0x01,0xff,0x8f,0xff,0xf8,0x00 ,0x00,0x00,0x03,0xe0,0xe3,0xff,0xe0,0x00 ,0x00,0x00,0x01,0x80,0x00,0x7f,0x00,0x00 }; //————————————————————— #define FinPr_invalid_width 64 #define FinPr_invalid_height 64 const uint8_t PROGMEM FinPr_invalid_bits[] = {   0x00,0x00,0x03,0xfe,0x00,0x00,0x00,0x00 ,0x00,0x00,0x1f,0xff,0xe0,0x00,0x00,0x00 ,0x00,0x00,0x7f,0xff,0xf8,0x00,0x00,0x00 ,0x00,0x00,0xfc,0x00,0xfe,0x00,0x00,0x00 ,0x00,0x03,0xe0,0x00,0x1f,0x00,0x00,0x00 ,0x00,0x07,0xc0,0x00,0x07,0x80,0x00,0x00 ,0x00,0x0f,0x80,0x00,0x03,0xe0,0x00,0x00 ,0x00,0x0e,0x03,0xff,0x01,0xe0,0x00,0x00 ,0x00,0x1c,0x1f,0xff,0xe0,0xf0,0x00,0x00 ,0x00,0x3c,0x3f,0xff,0xf0,0x78,0x00,0x00 ,0x00,0x78,0x7c,0x00,0xf8,0x3c,0x00,0x00 ,0x00,0x70,0xf0,0x00,0x3c,0x1c,0x00,0x00 ,0x00,0xe1,0xe0,0x00,0x1e,0x1c,0x00,0x00 ,0x00,0xe1,0xc0,0x00,0x0f,0x0e,0x00,0x00 ,0x00,0xc3,0x81,0xfc,0x07,0x0e,0x00,0x00 ,0x00,0x03,0x83,0xff,0x07,0x8e,0x00,0x00 ,0x00,0x07,0x07,0x8f,0x83,0x87,0x00,0x00 ,0x00,0x0f,0x0f,0x03,0xc3,0x87,0x00,0x00 ,0x00,0x1e,0x0e,0x01,0xc3,0x87,0x00,0x00 ,0x00,0x3c,0x1c,0x00,0xe1,0x87,0x00,0x00 ,0x00,0xf8,0x1c,0x30,0xe1,0x87,0x00,0x00 ,0x07,0xf0,0x38,0x70,0xe1,0x86,0x00,0x00 ,0x07,0xc0,0x78,0x70,0xe3,0x8e,0x00,0x00 ,0x02,0x00,0xf0,0xf0,0xe3,0x8e,0x00,0x00 ,0x00,0x01,0xe0,0xe0,0xe3,0x8e,0x00,0x00 ,0x00,0x03,0xc1,0xe1,0xc3,0x8e,0x00,0x00 ,0x00,0x0f,0x83,0xc3,0xc3,0x8e,0x00,0x00 ,0x00,0x7f,0x07,0x83,0x83,0x0e,0x00,0x00 ,0x07,0xfc,0x0f,0x07,0x83,0x0e,0x00,0x00 ,0x07,0xf0,0x1e,0x0f,0x03,0x0e,0x00,0x00 ,0x07,0x80,0x7c,0x1e,0x03,0x07,0x00,0x00 ,0x00,0x00,0xf8,0x3c,0x03,0x87,0x80,0x00 ,0x00,0x03,0xf0,0x78,0x03,0x83,0xc0,0x00 ,0x00,0x1f,0xc0,0xf0,0x02,0x00,0x00,0x00 ,0x00,0xff,0x01,0xe1,0xc0,0x00,0x00,0x00 ,0x07,0xfc,0x03,0xc3,0xe1,0xff,0xc0,0x00 ,0x07,0xe0,0x0f,0x87,0xc7,0xff,0xf0,0x00 ,0x07,0x00,0x3f,0x0f,0x0f,0xff,0xf8,0x00 ,0x00,0x00,0x7c,0x3e,0x1f,0xff,0xfe,0x00 ,0x00,0x03,0xf8,0x7c,0x3f,0xff,0xff,0x00 ,0x00,0x1f,0xe0,0xf0,0x7f,0xff,0xff,0x00 ,0x00,0xff,0x83,0xe0,0xfe,0xff,0xbf,0x80 ,0x01,0xfc,0x07,0xc0,0xfc,0x7f,0x1f,0xc0 ,0x01,0xe0,0x1f,0x01,0xf8,0x3e,0x0f,0xc0 ,0x00,0x00,0xfe,0x01,0xf8,0x1c,0x07,0xe0 ,0x00,0x03,0xf8,0x13,0xf8,0x00,0x0f,0xe0 ,0x00,0x1f,0xe0,0x73,0xfc,0x00,0x1f,0xe0 ,0x00,0x7f,0x81,0xf3,0xfe,0x00,0x3f,0xe0 ,0x00,0xfc,0x03,0xe3,0xff,0x00,0x7f,0xe0 ,0x00,0x60,0x0f,0xc3,0xff,0x80,0xff,0xe0 ,0x00,0x00,0x3f,0x03,0xff,0x00,0x7f,0xe0 ,0x00,0x00,0xfc,0x03,0xfe,0x00,0x3f,0xe0 ,0x00,0x07,0xf0,0x13,0xfc,0x00,0x1f,0xe0 ,0x00,0x0f,0xc0,0x79,0xf8,0x08,0x0f,0xe0 ,0x00,0x0f,0x01,0xf9,0xf8,0x1c,0x0f,0xc0 ,0x00,0x00,0x07,0xf1,0xfc,0x3e,0x1f,0xc0 ,0x00,0x00,0x1f,0xc0,0xfe,0x7f,0x3f,0x80 ,0x00,0x00,0x7e,0x00,0xff,0xff,0xff,0x80 ,0x00,0x00,0xfc,0x00,0x7f,0xff,0xff,0x00 ,0x00,0x00,0xf0,0x1f,0x3f,0xff,0xfe,0x00 ,0x00,0x00,0x00,0x7f,0x1f,0xff,0xfc,0x00 ,0x00,0x00,0x01,0xff,0x8f,0xff,0xf8,0x00 ,0x00,0x00,0x03,0xe0,0xe3,0xff,0xe0,0x00 ,0x00,0x00,0x01,0x80,0x00,0x7f,0x00,0x00 }; //————————————————————— #define FinPr_failed_width 64 #define FinPr_failed_height 64 const uint8_t PROGMEM FinPr_failed_bits[] = { 0x00,0x00,0x3f,0xe0,0x00,0x00,0x00,0x00 ,0x00,0x01,0xff,0xfe,0x00,0x00,0x00,0x00 ,0x00,0x0f,0xc0,0x1f,0x80,0x00,0x00,0x00 ,0x00,0x1e,0x00,0x03,0xc0,0x00,0x00,0x00 ,0x00,0x78,0x00,0x00,0xf0,0x00,0x00,0x00 ,0x00,0xe0,0x00,0x00,0x38,0x00,0x00,0x00 ,0x01,0xc0,0x00,0x00,0x1c,0x00,0x00,0x00 ,0x03,0x80,0x00,0x00,0x0e,0x00,0x00,0x00 ,0x07,0x00,0x7f,0xe0,0x07,0x00,0x00,0x00 ,0x06,0x01,0xff,0xf8,0x03,0x00,0x00,0x00 ,0x0c,0x03,0xc0,0x3c,0x03,0x80,0x00,0x00 ,0x1c,0x0f,0x00,0x0e,0x01,0x80,0x00,0x00 ,0x18,0x0c,0x00,0x03,0x00,0xc0,0x00,0x00 ,0x18,0x18,0x00,0x01,0x80,0xc0,0x00,0x00 ,0x30,0x38,0x00,0x01,0xc0,0xe0,0x00,0x00 ,0x30,0x30,0x0f,0x00,0xc0,0x60,0x00,0x00 ,0x30,0x30,0x3f,0xc0,0xe0,0x60,0x00,0x00 ,0x70,0x60,0x78,0xe0,0x60,0x60,0x00,0x00 ,0x60,0x60,0x60,0x60,0x60,0x70,0x00,0x00 ,0x60,0x60,0x60,0x60,0x60,0x30,0x00,0x00 ,0x60,0x60,0x60,0x60,0x30,0x30,0x00,0x00 ,0x60,0x60,0x60,0x30,0x30,0x20,0x00,0x00 ,0x60,0x60,0x60,0x30,0x30,0x01,0xe0,0x00 ,0x60,0x60,0x60,0x30,0x30,0x0f,0xfc,0x00 ,0x60,0x60,0x60,0x30,0x30,0x3f,0xff,0x00 ,0x60,0x60,0x60,0x30,0x18,0x78,0x03,0x80 ,0x60,0x60,0x60,0x30,0x1c,0x60,0x01,0x80 ,0x60,0x60,0x30,0x38,0x0c,0xc0,0x00,0xc0 ,0x00,0x60,0x30,0x18,0x00,0xc0,0x00,0xc0 ,0x00,0x60,0x30,0x18,0x00,0xc0,0x00,0xc0 ,0x00,0xe0,0x30,0x0c,0x01,0xc0,0x00,0xe0 ,0x00,0xc0,0x18,0x0e,0x01,0xc0,0x00,0xe0 ,0x60,0xc0,0x18,0x07,0x01,0xc0,0x00,0xe0 ,0x01,0xc0,0x1c,0x03,0x81,0xc0,0x00,0xe0 ,0x01,0x80,0x0c,0x01,0xc1,0xc0,0x00,0xe0 ,0x03,0x80,0x0e,0x00,0xf1,0xc0,0x00,0xe0 ,0x0f,0x00,0x06,0x00,0x01,0xc0,0x00,0xe0 ,0x3e,0x01,0x03,0x00,0x01,0xc0,0x00,0xe0 ,0x30,0x03,0x83,0x80,0x1f,0xff,0xff,0xfe ,0x00,0x03,0x81,0xc0,0x3f,0xff,0xff,0xff ,0x00,0x07,0xc0,0xe0,0x30,0x00,0x00,0x03 ,0x00,0x0e,0xc0,0x78,0x30,0x00,0x00,0x03 ,0x00,0x3c,0x60,0x1e,0x30,0x00,0x00,0x03 ,0x00,0x78,0x70,0x0f,0x30,0x00,0x00,0x03 ,0x03,0xe0,0x38,0x03,0x30,0x00,0x00,0x03 ,0x07,0x80,0x1c,0x00,0x30,0x00,0x00,0x03 ,0xc0,0x00,0x0f,0x00,0x30,0x00,0x00,0x03 ,0xc0,0x00,0x03,0x80,0x30,0x01,0xe0,0x03 ,0x00,0x18,0x01,0xe0,0x30,0x03,0xf0,0x03 ,0x00,0x18,0x00,0x7c,0x30,0x07,0x38,0x03 ,0x00,0x0c,0x00,0x1f,0x30,0x06,0x18,0x03 ,0x18,0x0e,0x00,0x07,0x30,0x06,0x18,0x03 ,0x0c,0x07,0x80,0x00,0x30,0x07,0x38,0x03 ,0x0e,0x03,0xc0,0x00,0x30,0x03,0x30,0x03 ,0x07,0x00,0xf0,0x00,0x30,0x03,0x30,0x03 ,0x03,0x00,0x7e,0x00,0x30,0x03,0x30,0x03 ,0x01,0x80,0x1f,0xc0,0x30,0x03,0x30,0x03 ,0x01,0xc0,0x03,0xe1,0x30,0x07,0xf8,0x03 ,0x00,0xf0,0x00,0x01,0x30,0x03,0xf0,0x03 ,0x00,0x38,0x00,0x00,0x30,0x00,0x00,0x03 ,0x00,0x1e,0x00,0x00,0x30,0x00,0x00,0x03 ,0x00,0x07,0xc0,0x00,0x30,0x00,0x00,0x03 ,0x00,0x01,0xff,0x80,0x3f,0xff,0xff,0xff ,0x00,0x00,0x3f,0x80,0x1f,0xff,0xff,0xfe }; //————————————————————— #define FinPr_scan_width 64 #define FinPr_scan_height 64 const uint8_t PROGMEM FinPr_scan_bits[] = {   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x1f,0xf8,0x00,0x00,0x00 ,0x00,0x00,0x00,0x7f,0xff,0x00,0x00,0x00 ,0x00,0x00,0x01,0xfc,0x7f,0xc0,0x00,0x00 ,0x00,0x00,0x03,0xc0,0x03,0xe0,0x00,0x00 ,0x00,0x00,0x07,0x80,0x00,0xf0,0x00,0x00 ,0x00,0x00,0x0e,0x00,0x00,0x3c,0x00,0x00 ,0x00,0x00,0x1c,0x1f,0xfc,0x1c,0x00,0x00 ,0x00,0x00,0x38,0x7f,0xfe,0x0e,0x00,0x00 ,0x00,0x00,0x78,0xf8,0x0f,0x87,0x00,0x00 ,0x00,0x00,0x71,0xe0,0x03,0xc7,0x00,0x00 ,0x00,0x00,0xe3,0x80,0x01,0xc3,0x80,0x00 ,0x00,0x00,0xc3,0x83,0xc0,0xe3,0x80,0x00 ,0x00,0x00,0xc7,0x0f,0xf0,0x71,0x80,0x00 ,0x00,0x00,0x06,0x1f,0xf8,0x71,0xc0,0x00 ,0x00,0x00,0x0e,0x1c,0x3c,0x31,0xc0,0x00 ,0x00,0x00,0x1c,0x38,0x1c,0x31,0xc0,0x00 ,0x00,0x00,0x38,0x70,0x0e,0x39,0xc0,0x00 ,0x00,0x01,0xf0,0x71,0x8e,0x39,0xc0,0x00 ,0x00,0x03,0xe0,0xe1,0x86,0x31,0xc0,0x00 ,0x00,0x03,0x81,0xe3,0x8e,0x31,0x80,0x00 ,0x00,0x00,0x03,0xc3,0x8e,0x33,0x80,0x00 ,0x00,0x00,0x07,0x87,0x0c,0x73,0x80,0x00 ,0x00,0x00,0x1f,0x0e,0x1c,0x73,0x80,0x00 ,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xfe ,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff ,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff ,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xfe ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x03,0xf0,0x1e,0x3e,0x1c,0x00,0x00 ,0x00,0x03,0x80,0x7c,0x77,0x0f,0x00,0x00 ,0x00,0x00,0x01,0xf0,0xe3,0x07,0xc0,0x00 ,0x00,0x00,0x07,0xe3,0xc3,0x81,0xf0,0x00 ,0x00,0x00,0x3f,0x87,0x81,0xc0,0x60,0x00 ,0x00,0x01,0xfc,0x1f,0x00,0xf0,0x00,0x00 ,0x00,0x01,0xe0,0x3c,0x00,0x7c,0x00,0x00 ,0x00,0x00,0x00,0xf8,0x78,0x1f,0x00,0x00 ,0x00,0x00,0x07,0xe0,0xfc,0x0f,0xc0,0x00 ,0x00,0x00,0x3f,0x83,0xef,0x03,0xc0,0x00 ,0x00,0x00,0xfc,0x0f,0x87,0x80,0x00,0x00 ,0x00,0x00,0x70,0x1f,0x03,0xe0,0x00,0x00 ,0x00,0x00,0x00,0x7c,0x00,0xf8,0x00,0x00 ,0x00,0x00,0x01,0xf0,0x00,0x3e,0x00,0x00 ,0x00,0x00,0x0f,0xc0,0xf8,0x0f,0x00,0x00 ,0x00,0x00,0x1f,0x03,0xfe,0x02,0x00,0x00 ,0x00,0x00,0x0c,0x0f,0x8f,0x80,0x00,0x00 ,0x00,0x00,0x00,0x3f,0x03,0xe0,0x00,0x00 ,0x00,0x00,0x00,0xf8,0x00,0xf0,0x00,0x00 ,0x00,0x00,0x01,0xe0,0x00,0x30,0x00,0x00 ,0x00,0x00,0x01,0xc0,0xf8,0x00,0x00,0x00 ,0x00,0x00,0x00,0x07,0xfe,0x00,0x00,0x00 ,0x00,0x00,0x00,0x0f,0x8e,0x00,0x00,0x00 ,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }; //************************************************************************ void setup() { Serial.begin(115200); //———–initiate OLED display————- // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128×64 Serial.println(F(“SSD1306 allocation failed”)); for(;;); // Don’t proceed, loop forever } // Show initial display buffer contents on the screen — // the library initializes this with an Adafruit splash screen. // you can delet these three lines if you don’t want to get the Adfruit logo appear display.display(); delay(2000); // Pause for 2 seconds display.clearDisplay(); //——————————————— connectToWiFi(); //——————————————— // set the data rate for the sensor serial port finger.begin(57600); Serial.println(“\n\nAdafruit finger detect test”); if (finger.verifyPassword()) { Serial.println(“Found fingerprint sensor!”); display.clearDisplay(); display.drawBitmap( 34, 0, FinPr_valid_bits, FinPr_valid_width, FinPr_valid_height, WHITE); display.display(); } else { Serial.println(“Did not find fingerprint sensor :(“); display.clearDisplay(); display.drawBitmap( 32, 0, FinPr_failed_bits, FinPr_failed_width, FinPr_failed_height, WHITE); display.display(); while (1) { delay(1); } } //——————————————— finger.getTemplateCount(); Serial.print(“Sensor contains “); Serial.print(finger.templateCount); Serial.println(” templates”); Serial.println(“Waiting for valid finger…”); //————*test the connection*———— //SendFingerprintID( FingerID ); } //************************************************************************ void loop() { //check if there’s a connection to WiFi or not if(WiFi.status() != WL_CONNECTED){ connectToWiFi(); } //——————————————— //If there no fingerprint has been scanned return -1 or -2 if there an error or 0 if there nothing, The ID start form 1 to 127 FingerID = getFingerprintID(); // Get the Fingerprint ID from the Scanner delay(50); //don’t need to run this at full speed. //——————————————— DisplayFingerprintID(); //——————————————— ChecktoAddID(); //——————————————— ChecktoDeleteID(); //——————————————— } //************Display the fingerprint ID state on the OLED************* void DisplayFingerprintID(){ //Fingerprint has been detected if (FingerID > 0){ display.clearDisplay(); display.drawBitmap( 34, 0, FinPr_valid_bits, FinPr_valid_width, FinPr_valid_height, WHITE); display.display(); SendFingerprintID( FingerID ); // Send the Fingerprint ID to the website. } //——————————————— //No finger detected else if (FingerID == 0){ display.clearDisplay(); display.drawBitmap( 32, 0, FinPr_start_bits, FinPr_start_width, FinPr_start_height, WHITE); display.display(); } //——————————————— //Didn’t find a match else if (FingerID == -1){ display.clearDisplay(); display.drawBitmap( 34, 0, FinPr_invalid_bits, FinPr_invalid_width, FinPr_invalid_height, WHITE); display.display(); } //——————————————— //Didn’t find the scanner or there an error else if (FingerID == -2){ display.clearDisplay(); display.drawBitmap( 32, 0, FinPr_failed_bits, FinPr_failed_width, FinPr_failed_height, WHITE); display.display(); } } //************send the fingerprint ID to the website************* void SendFingerprintID( int finger ){ HTTPClient http; //Declare object of class HTTPClient //Post Data postData = “FingerID=” + String(finger); // Add the Fingerprint ID to the Post array in order to send it // Post methode http.begin(link); //initiate HTTP request, put your Website URL or Your Computer IP http.addHeader(“Content-Type”, “application/x-www-form-urlencoded”); //Specify content-type header int httpCode = http.POST(postData); //Send the request String payload = http.getString(); //Get the response payload Serial.println(httpCode); //Print HTTP return code Serial.println(payload); //Print request response payload Serial.println(postData); //Post Data Serial.println(finger); //Print fingerprint ID if (payload.substring(0, 5) == “login”) { String user_name = payload.substring(5); // Serial.println(user_name); display.clearDisplay(); display.setTextSize(2); // Normal 2:2 pixel scale display.setTextColor(WHITE); // Draw white text display.setCursor(15,0); // Start at top-left corner display.print(F(“Welcome”)); display.setCursor(0,20); display.print(user_name); display.display(); } else if (payload.substring(0, 6) == “logout”) { String user_name = payload.substring(6); // Serial.println(user_name); display.clearDisplay(); display.setTextSize(2); // Normal 2:2 pixel scale display.setTextColor(WHITE); // Draw white text display.setCursor(10,0); // Start at top-left corner display.print(F(“Good Bye”)); display.setCursor(0,20); display.print(user_name); display.display(); } delay(1000); postData = “”; http.end(); //Close connection } //********************Get the Fingerprint ID****************** int getFingerprintID() { uint8_t p = finger.getImage(); switch (p) { case FINGERPRINT_OK: //Serial.println(“Image taken”); break; case FINGERPRINT_NOFINGER: //Serial.println(“No finger detected”); return 0; case FINGERPRINT_PACKETRECIEVEERR: //Serial.println(“Communication error”); return -2; case FINGERPRINT_IMAGEFAIL: //Serial.println(“Imaging error”); return -2; default: //Serial.println(“Unknown error”); return -2; } // OK success! p = finger.image2Tz(); switch (p) { case FINGERPRINT_OK: //Serial.println(“Image converted”); break; case FINGERPRINT_IMAGEMESS: //Serial.println(“Image too messy”); return -1; case FINGERPRINT_PACKETRECIEVEERR: //Serial.println(“Communication error”); return -2; case FINGERPRINT_FEATUREFAIL: //Serial.println(“Could not find fingerprint features”); return -2; case FINGERPRINT_INVALIDIMAGE: //Serial.println(“Could not find fingerprint features”); return -2; default: //Serial.println(“Unknown error”); return -2; } // OK converted! p = finger.fingerFastSearch(); if (p == FINGERPRINT_OK) { //Serial.println(“Found a print match!”); } else if (p == FINGERPRINT_PACKETRECIEVEERR) { //Serial.println(“Communication error”); return -2; } else if (p == FINGERPRINT_NOTFOUND) { //Serial.println(“Did not find a match”); return -1; } else { //Serial.println(“Unknown error”); return -2; } // found a match! //Serial.print(“Found ID #”); Serial.print(finger.fingerID); //Serial.print(” with confidence of “); Serial.println(finger.confidence); return finger.fingerID; } //******************Check if there a Fingerprint ID to delete****************** void ChecktoDeleteID(){ HTTPClient http; //Declare object of class HTTPClient //Post Data postData = “DeleteID=check”; // Add the Fingerprint ID to the Post array in order to send it // Post methode http.begin(link); //initiate HTTP request, put your Website URL or Your Computer IP http.addHeader(“Content-Type”, “application/x-www-form-urlencoded”); //Specify content-type header int httpCode = http.POST(postData); //Send the request String payload = http.getString(); //Get the response payload if (payload.substring(0, 6) == “del-id”) { String del_id = payload.substring(6); Serial.println(del_id); deleteFingerprint( del_id.toInt() ); } http.end(); //Close connection } //******************Delete Finpgerprint ID***************** uint8_t deleteFingerprint( int id) { uint8_t p = -1; p = finger.deleteModel(id); if (p == FINGERPRINT_OK) { //Serial.println(“Deleted!”); display.clearDisplay(); display.setTextSize(2); // Normal 2:2 pixel scale display.setTextColor(WHITE); // Draw white text display.setCursor(0,0); // Start at top-left corner display.print(F(“Deleted!\n”)); display.display(); } else if (p == FINGERPRINT_PACKETRECIEVEERR) { //Serial.println(“Communication error”); display.clearDisplay(); display.setTextSize(1); // Normal 1:1 pixel scale display.setTextColor(WHITE); // Draw white text display.setCursor(0,0); // Start at top-left corner display.print(F(“Communication error!\n”)); display.display(); return p; } else if (p == FINGERPRINT_BADLOCATION) { //Serial.println(“Could not delete in that location”); display.clearDisplay(); display.setTextSize(1); // Normal 1:1 pixel scale display.setTextColor(WHITE); // Draw white text display.setCursor(0,0); // Start at top-left corner display.print(F(“Could not delete in that location!\n”)); display.display(); return p; } else if (p == FINGERPRINT_FLASHERR) { //Serial.println(“Error writing to flash”); display.clearDisplay(); display.setTextSize(1); // Normal 1:1 pixel scale display.setTextColor(WHITE); // Draw white text display.setCursor(0,0); // Start at top-left corner display.print(F(“Error writing to flash!\n”)); display.display(); return p; } else { //Serial.print(“Unknown error: 0x”); Serial.println(p, HEX); display.clearDisplay(); display.setTextSize(2); // Normal 2:2 pixel scale display.setTextColor(WHITE); // Draw white text display.setCursor(0,0); // Start at top-left corner display.print(F(“Unknown error:\n”)); display.display(); return p; } } //******************Check if there a Fingerprint ID to add****************** void ChecktoAddID(){ HTTPClient http; //Declare object of class HTTPClient //Post Data postData = “Get_Fingerid=get_id”; // Add the Fingerprint ID to the Post array in order to send it // Post methode http.begin(link); //initiate HTTP request, put your Website URL or Your Computer IP http.addHeader(“Content-Type”, “application/x-www-form-urlencoded”); //Specify content-type header int httpCode = http.POST(postData); //Send the request String payload = http.getString(); //Get the response payload if (payload.substring(0, 6) == “add-id”) { String add_id = payload.substring(6); Serial.println(add_id); id = add_id.toInt(); getFingerprintEnroll(); } http.end(); //Close connection } //******************Enroll a Finpgerprint ID***************** uint8_t getFingerprintEnroll() { int p = -1; display.clearDisplay(); display.drawBitmap( 34, 0, FinPr_scan_bits, FinPr_scan_width, FinPr_scan_height, WHITE); display.display(); while (p != FINGERPRINT_OK) { p = finger.getImage(); switch (p) { case FINGERPRINT_OK: //Serial.println(“Image taken”); display.clearDisplay(); display.drawBitmap( 34, 0, FinPr_valid_bits, FinPr_valid_width, FinPr_valid_height, WHITE); display.display(); break; case FINGERPRINT_NOFINGER: //Serial.println(“.”); display.setTextSize(1); // Normal 2:2 pixel scale display.setTextColor(WHITE); // Draw white text display.setCursor(0,0); // Start at top-left corner display.print(F(“scanning”)); display.display(); break; case FINGERPRINT_PACKETRECIEVEERR: display.clearDisplay(); display.drawBitmap( 34, 0, FinPr_invalid_bits, FinPr_invalid_width, FinPr_invalid_height, WHITE); display.display(); break; case FINGERPRINT_IMAGEFAIL: Serial.println(“Imaging error”); break; default: Serial.println(“Unknown error”); break; } } // OK success! p = finger.image2Tz(1); switch (p) { case FINGERPRINT_OK: display.clearDisplay(); display.drawBitmap( 34, 0, FinPr_valid_bits, FinPr_valid_width, FinPr_valid_height, WHITE); display.display(); break; case FINGERPRINT_IMAGEMESS: display.clearDisplay(); display.drawBitmap( 34, 0, FinPr_invalid_bits, FinPr_invalid_width, FinPr_invalid_height, WHITE); display.display(); return p; case FINGERPRINT_PACKETRECIEVEERR: Serial.println(“Communication error”); return p; case FINGERPRINT_FEATUREFAIL: Serial.println(“Could not find fingerprint features”); return p; case FINGERPRINT_INVALIDIMAGE: Serial.println(“Could not find fingerprint features”); return p; default: Serial.println(“Unknown error”); return p; } display.clearDisplay(); display.setTextSize(2); // Normal 2:2 pixel scale display.setTextColor(WHITE); // Draw white text display.setCursor(0,0); // Start at top-left corner display.print(F(“Remove”)); display.setCursor(0,20); display.print(F(“finger”)); display.display(); //Serial.println(“Remove finger”); delay(2000); p = 0; while (p != FINGERPRINT_NOFINGER) { p = finger.getImage(); } Serial.print(“ID “); Serial.println(id); p = -1; display.clearDisplay(); display.drawBitmap( 34, 0, FinPr_scan_bits, FinPr_scan_width, FinPr_scan_height, WHITE); display.display(); while (p != FINGERPRINT_OK) { p = finger.getImage(); switch (p) { case FINGERPRINT_OK: //Serial.println(“Image taken”); display.clearDisplay(); display.drawBitmap( 34, 0, FinPr_valid_bits, FinPr_valid_width, FinPr_valid_height, WHITE); display.display(); break; case FINGERPRINT_NOFINGER: //Serial.println(“.”); display.setTextSize(1); // Normal 2:2 pixel scale display.setTextColor(WHITE); // Draw white text display.setCursor(0,0); // Start at top-left corner display.print(F(“scanning”)); display.display(); break; case FINGERPRINT_PACKETRECIEVEERR: Serial.println(“Communication error”); break; case FINGERPRINT_IMAGEFAIL: Serial.println(“Imaging error”); break; default: Serial.println(“Unknown error”); break; } } // OK success! p = finger.image2Tz(2); switch (p) { case FINGERPRINT_OK: //Serial.println(“Image converted”); display.clearDisplay(); display.drawBitmap( 34, 0, FinPr_valid_bits, FinPr_valid_width, FinPr_valid_height, WHITE); display.display(); break; case FINGERPRINT_IMAGEMESS: Serial.println(“Image too messy”); return p; case FINGERPRINT_PACKETRECIEVEERR: Serial.println(“Communication error”); return p; case FINGERPRINT_FEATUREFAIL: Serial.println(“Could not find fingerprint features”); return p; case FINGERPRINT_INVALIDIMAGE: Serial.println(“Could not find fingerprint features”); return p; default: Serial.println(“Unknown error”); return p; } // OK converted! Serial.print(“Creating model for #”); Serial.println(id); p = finger.createModel(); if (p == FINGERPRINT_OK) { //Serial.println(“Prints matched!”); display.clearDisplay(); display.drawBitmap( 34, 0, FinPr_valid_bits, FinPr_valid_width, FinPr_valid_height, WHITE); display.display(); } else if (p == FINGERPRINT_PACKETRECIEVEERR) { Serial.println(“Communication error”); return p; } else if (p == FINGERPRINT_ENROLLMISMATCH) { Serial.println(“Fingerprints did not match”); return p; } else { Serial.println(“Unknown error”); return p; } Serial.print(“ID “); Serial.println(id); p = finger.storeModel(id); if (p == FINGERPRINT_OK) { //Serial.println(“Stored!”); display.clearDisplay(); display.drawBitmap( 34, 0, FinPr_valid_bits, FinPr_valid_width, FinPr_valid_height, WHITE); display.display(); confirmAdding(); } else if (p == FINGERPRINT_PACKETRECIEVEERR) { Serial.println(“Communication error”); return p; } else if (p == FINGERPRINT_BADLOCATION) { Serial.println(“Could not store in that location”); return p; } else if (p == FINGERPRINT_FLASHERR) { Serial.println(“Error writing to flash”); return p; } else { Serial.println(“Unknown error”); return p; } } //******************Check if there a Fingerprint ID to add****************** void confirmAdding(){ HTTPClient http; //Declare object of class HTTPClient //Post Data postData = “confirm_id=” + String(id); // Add the Fingerprint ID to the Post array in order to send it // Post methode http.begin(link); //initiate HTTP request, put your Website URL or Your Computer IP http.addHeader(“Content-Type”, “application/x-www-form-urlencoded”); //Specify content-type header int httpCode = http.POST(postData); //Send the request String payload = http.getString(); //Get the response payload display.clearDisplay(); display.setTextSize(1.5); // Normal 1:1 pixel scale display.setTextColor(WHITE); // Draw white text display.setCursor(0,0); // Start at top-left corner display.print(payload); display.display(); delay(1000); Serial.println(payload); http.end(); //Close connection } //********************connect to the WiFi****************** void connectToWiFi(){ WiFi.mode(WIFI_OFF); //Prevents reconnection issue (taking too long to connect) delay(1000); WiFi.mode(WIFI_STA); Serial.print(“Connecting to “); Serial.println(ssid); WiFi.begin(ssid, password); display.clearDisplay(); display.setTextSize(1); // Normal 1:1 pixel scale display.setTextColor(WHITE); // Draw white text display.setCursor(0, 0); // Start at top-left corner display.print(F(“Connecting to \n”)); display.setCursor(0, 50); display.setTextSize(2); display.print(ssid); display.drawBitmap( 73, 10, Wifi_start_bits, Wifi_start_width, Wifi_start_height, WHITE); display.display(); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print(“.”); } Serial.println(“”); Serial.println(“Connected”); display.clearDisplay(); display.setTextSize(2); // Normal 1:1 pixel scale display.setTextColor(WHITE); // Draw white text display.setCursor(8, 0); // Start at top-left corner display.print(F(“Connected \n”)); display.drawBitmap( 33, 15, Wifi_connected_bits, Wifi_connected_width, Wifi_connected_height, WHITE); display.display(); Serial.print(“IP address: “); Serial.println(WiFi.localIP()); //IP address assigned to your ESP }

3. Hoạt động của mạch cảm biến vân tay AS608 giao tiếp ESP8266

Khi cấp điện mạng lưới hệ thống hoạt động giải trí, vi điều khiển và tinh chỉnh hiển thị thông tin khởi đầu. Lúc này vi tinh chỉnh và điều khiển chờ tín hiệu từ cảm biến vân tay AS608 đưa vào. Khi nhận tín hiệu từ cảm biến vân tay AS608 tiếp xúc ESP8266 vi điều khiển và tinh chỉnh đo lường và thống kê, giải quyết và xử lý tài liệu sau đó hiển thị giá trị thông tin vân tay lên màn hình hiển thị Oled theo nhu yếu đã được lập trình.

4. Cụ thể hoạt động của mạch cảm biến vân tay AS608 giao tiếp ESP8266:



Ngoài ra còn nhiều Phần và các môn khác

Đồ án điện tử, Lập trình vi điều khiển tổng hợp File đồ án – Phần 1
Mạch điện tử, Lập trình vi điều khiển tổng hợp File đồ án – Phần 2
Thiết kế mạch điện tử, Lập trình vi điều khiển tổng hợp File đồ án – Phần 3
Vi xử lý, Lập trình vi điều khiển Pic – 8051 – Avr – Phần 4
Tổng hợp File ĐỒ ÁN Điện tử cơ bản
Tổng hợp File ĐỒ ÁN Viễn thông
Tổng hợp File ĐỒ ÁN PLC
Tổng hợp File ĐỒ ÁN Cung cấp điện

Sẽ còn các phần khác nữa nhé.

Chúc các bạn thành công…!!!

Source: https://dvn.com.vn
Category: Phụ Kiện

Alternate Text Gọi ngay