1. Trang chủ
  2. » Luận Văn - Báo Cáo

Thiết kế ổ cắm thông minh điều khiển qua wifi(1)

68 2 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Thiết Kế Ổ Cắm Thông Minh Điều Khiển Qua Wifi
Tác giả Tạ Anh Tú
Người hướng dẫn Ths. Nguyễn Thị Huế
Trường học Đại học Bách Khoa Hà Nội
Thể loại báo cáo thực tập tốt nghiệp
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 68
Dung lượng 1,64 MB

Nội dung

Các thiết bị như công tắc, ổ cắm không chỉ đơn thuân là cung cấp, đóng cắt điện cho các thiết bị điện khác nữa mà nó còn giúp người sử dụng giám sát trạng thái đang bât hay tắt nếu người

Trang 1

ĐẠI HỌC BÁCH KHOA HÀ NỘI

TRƯỜNG ĐIỆN-ĐIỆN TỬ

BỘ MÔN KỸ THUẬT VÀ ĐIỀU KHIỂN TỰ ĐỘNG HOÁ

BÁO CÁO

THỰC TẬP TỐT NGHIỆP

Hà Nội, 3-2023

Trang 2

LỜI NÓI ĐẦU

Ngày nay khoa học, kỹ thuật nói chung và lĩnh vực IoT nói riêng đang phát triển rất nhanh để dáp ứng nhu cầu ngày càng cao của con người Các thiết bị như công tắc, ổ cắm không chỉ đơn thuân là cung cấp, đóng cắt điện cho các thiết bị điện khác nữa mà

nó còn giúp người sử dụng giám sát trạng thái đang bât hay tắt nếu người đó ra ngoài

mà không nhớ đã bật/tắt thiết bị đó chưa và có thể điều khiển bật/tắt thiết bị đó từ bất

cữ đâu chỉ cần kết nối internet Thậm chí người sử dụng có thể lên lịch hẹn giờ cho công tắt/ ổ cắm bật tắt các thiết bị ví dụ như bật bình nóng lạnh trước khi về nhà, bật hệ thống tưới cây, bơm ô oxi bể cá vào những khung giờ cố định lặp đi lặp lại hàng ngày… Ngoài

ra nếu bạn là một người sống tiết kiệm muốn giám sát, kiểm soát điện năng tiêu thụ trong nhà thì tính năng đo lường giám sát điện năng của ổ cắm thông minh sẽ rất hữu ích Hiểu được những vai trò lợi ích to lớn đó nên em đã lựa chọn đề tài “Thiết kế ổ cắm thông minh điều khiển qua wifi” cho đồ án thiết kế này

Em cũng xin cảm ơn Ths Nguyễn Thị Huế , người cô đã hết lòng giúp đỡ và luôn tạo mọi điều kiện tốt nhất cho em trong suốt thời gian thực hiện đồ án

Cuối cùng em xin gửi lời cảm ơn sâu sắc tới gia đình, bạn bè, những người đã không ngừng động viên, hỗ trợ và tạo mọi điều kiện tốt nhất cho em trong suốt thời gian thực hiện đồ án

Đồ án thiết kế của em được trình bày gồm 3 chương:

Chương 1: giới thiệu tổng quan thiết kế phần cứng của ổ cắm thông minh; tính toán, lựa chọn linh kiện thiết kế mạch đo lường điện năng; lựa chọn module wifi, mạch lực đóng/cắt cho ổ cắm

Chương 2: Trình bày cách thức giao tiếp với IC đo lường điện năng là ADE7753; trình bày giải thích chương trình của vi điều khiển atmega328, esp32 cũng như cách thức biên dịch nạp code cho vi điều khiển

Chương 3: trình bày giải thích các file lập trình android, cũng như quá trình tạo và cài đặt ứng dụng trên điện thoại android

Trang 3

MỤC LỤC

DANH MỤC HÌNH VẼ iv

CHƯƠNG 1 THIẾT KẾ MẠCH ĐO ĐIỆN NĂNG 1

1.1 Sơ đồ nguyên lý mạch đo 1

1.2 Khối nguồn 1

1.3 Khối đo lường 3

1.3.1 Khối biến đổi dòng điện 3

1.3.2 Khối biến đổi điện áp 4

1.3.3 IC tính toán thông số điện 6

1.4 Khối xử lý dữ liệu đo 7

1.5 Khối hiển thị 9

1.6 Khối truyền tin qua wifi 10

1.7 Khối relay 10

CHƯƠNG 2 THIẾT KẾ PHẦN MỀM CHO BO MẠCH 12

2.1 Giao tiếp với ADE7753 12

2.1.1 Quá trình ghi dữ liệu 12

2.1.2 Quá trình đọc dữ liệu 13

2.1.3 Một số thanh ghi của ADE7753 13

2.2 Lập trình ATMEGA328 14

2.2.1 Arduino IDE 14

2.2.2 Bootloader của atmega328 15

2.2.3 Chương trình chính của ATMEGA328 16

2.3 Lập trình ESP32 17

2.3.1 Cấu trúc project 17

2.3.2 Môi trường lập trình ESP32 19

CHƯƠNG 3 THIẾT KẾ PHẦN MỀM GIÁM SÁT, ĐIỀU KHIỂN TỪ XA 21

3.1 Các file cần quan tầm trong project android 21

Trang 4

3.1.1 File build.gradle(:app) 21

3.1.2 File main_activity.xml 22

3.1.3 File MainActivity.java 24

3.1.4 File AndroidMainfest.xml 25

3.2 Tạo project, xuất file apk 26

3.2.1 Tạo và build project, thiết lập máy ảo 26

3.2.2 Xuất file apk 29

KẾT LUẬN 33

TÀI LIỆU THAM KHẢO 34

PHỤ LỤC 35

Phụ lục 1 Các bước biên dịch, nạp bootloader bằng arduino ide và phần mềm PROGISP 35

Phụ lục 2: Các bước nạp code bằng arduino ide và mạch nạp USB-UART 38

Phụ lục 3: Code của chương trình chính ATMEGA328 39

Phụ lục 4: giải thích file main.c trong project esp32 42

Phụ lục 5: code trong file MainActivity.java 58

Trang 5

DANH MỤC HÌNH VẼ

Hình 1.1 Sơ đồ khối chức năng mạch đo 1

Hình 1.2 Sơ đồ nguyên lý khối nguồn 2

Hình 1.3 sơ đồ nguyên lý khối biến đổi dòng điện 3

Hình 1.4 Sơ đồ nguyên lý biến đổi điện áp 4

Hình 1.5 Sơ đồ nguyên lý mạch đo thông số điện sử dụng ADE7753 6

Hình 1.6 Sơ đồ nguyên lý khối xử lý dữ liệu đo 8

Hình 1.7 Mạch đo lường điện năng 9

Hình 2.1 Quá trình ghi của ADE7753 13

Hình 2.2 Quá trình đọc của ADE7753 13

Hình 2.3 Chức năng của các icon trên thanh công cụ 14

Hình 2.4 Chức năng của vùng trên arduino ide 15

Hình 2.5 Mạch nạp USB ISP AVR programmer 16

Hình 2.6 Lưu đồ chương trình ATMEGA328 17

Hình 3.1 Giao diện màn hình 24

Hình 3.2 Lựa chọn loại thiết bị, template cho giao diện 27

Hình 3.3 Lựa tên project, api 27

Hình 3.4 Lựa chọn thiết bị mô phỏng 28

Hình 3.5 Lựa chọn hệ điều hành cho điện thoại mô phỏng 28

Hình 3.6 Generate apk file 29

Hình 3.7 Tạo new key store 30

Hình 3.8 create apk 30

Trang 6

CHƯƠNG 1 THIẾT KẾ MẠCH ĐO ĐIỆN NĂNG

1.1 Sơ đồ nguyên lý mạch đo

Sơ đồ khối chức năng của ổ cắm thông minh như hình 1.1

1.2 Khối nguồn

Điện áp 220 VAC từ jack cắm P1 đi qua module HLK 5M05 biến đổi nguồn 220VAC/5VDC sẽ cho điện áp ra 5VDC Điện áp 5VDC tiếp tục đi qua ic AMS1117 biến đổi điện áp 5V/3.3V để có được điện áp ra là 3.3VDC (hình 1.2)

Hình 1.1 Sơ đồ khối chức năng mạch đo

Trang 7

Ngoài ra còn có các linh kiện cầu chì (0.2A), varistor (300V) dùng để bảo vệ quá tải, ngắn mạch, chống sét cho nguồn Các tụ điện và cuộn cảm còn lại dùng để lọc nhiễu cho nguồn DC đầu ra Thông số của các linh kiện này được lựa chọn theo khuyến nghị của nhà sản suất module HLK5M05, IC AMS1117.

Dòng tiêu thụ tối đa của atmega328 là 42mA; LCD5110 là 50mA; ADE7753 là 7mA; module ESP32 là 500mA Như vây với module HLK5M05 công suất ra 5V/5W, và IC AMS1117 3.3V/3.3W đáp ứng được yêu cầu các khối chức năng còn lại

Thông số cơ bản của module HLK5M05 và AMS1117/3.3V như bảng bên dưới:

Điện áp vào: 100V ~ 240V AC / 50 ~ 60Hz

Trang 8

• Điện áp ngõ ra: 3.3V

• Dòng ra tối đa: 1A

• Áp ngõ vào: 1.5 < Vin-Vout < 12V (4.8-8.7VDC)

• Dạng chân: SOT-223

• Nhiệt độ hoạt động: -40 đến 125

độ C

1.3 Khối đo lường

Thông số dòng điện, điện áp, công suất, năng lượng của tải được xác định bằng cách cho tín hiệu điện AC mà tải sử dụng đi qua bộ biến đổi dòng điện, điện áp để đưa vào đầu vào kênh dòng điện, điện áp của ADE7753 để tính toán, xác định thông số dòng điện

1.3.1 Khối biến đổi dòng điện

Dòng điện AC mà tải sử dụng đi qua biến dòng CT1 để hạ giá xuống cỡ Ampe xuống mili Ampe Dòng điện đầu ra của biến dòng CT1 đi qua điện trở R3 để biến đổi tín hiệu dòng điện hành tín hiệu điện áp trước khi đưa vào đầu vào kênh dòng điện của ADE7753

Hình 1.3 sơ đồ nguyên lý khối biến đổi dòng điện

Trang 9

là V1P và V1N Điện trở, tụ điện còn lại đóng vai trò như mạch lọc thông thấp và giá trị của chúng được lựa chọn theo sơ đồ mẫu trong datasheet của ADE7753 (hình 1.3)

Do hạn chế về thiết bị, tải kiểm chứng nên biến dòng CT của em lựa chọn là loại điến dòng 10A, biến đổi tuyến tính nhất trong pham vi 5A với tỷ số biến đổi là 1000 (5A/5mA)

Điện trở 𝑅3 =𝑉𝑝𝑒𝑎𝑘

√2 ÷ 𝐼𝑠𝑐

1000 =0.5𝑉√2 ÷100010𝐴 ≈ 35 𝑜ℎ𝑚, Chọn Điện trở R3 = 33 ohm 1/4 W

Thông số biến dòng ZMCT103C 5A/5mA như bảng bên dưới:

Tỷ lệ: 1000 : 1Sai số góc pha: <20' (100Ω)Dải tuyến tính: 0~10A(100Ω)Điện áp cách ly: 3000VSai số tuyến tính: ≤0.2%

1.3.2 Khối biến đổi điện áp

Điện áp AC của tải sử dụng được biến đổi tỉ lệ, hạ áp xuống thông qua biến dòng ZMPT101b và 2 điện trở R4 và R5 trước khi đưa vào kênh điện áp của ADE7753 là V2P

Hình 1.4 Sơ đồ nguyên lý biến đổi điện áp

Trang 10

và V2N Các giá trị điện trở, tụ điện còn lại đóng vai trò như mạch lọc thông thấp và giá trị của chúng được lựa chọn theo sơ đồ mẫu trong datasheet của ADE7753.

Chọn biến dòng ZMPT101b có cách điện 3000VAC, hệ số biến đổi 2mA:2mA (tỉ lệ 1:1 và tuyến tính nhất khi dòng điện đầu vào là 2mA), tính chọn R5, R4

𝐼𝑖𝑛 =𝑉𝑅𝑖𝑛

5

Với điện áp Vin tối đa là 1000V để đảm bảo dòng sơ cấp Iin <10mA thì R5>100k ohm; Đối tượng đo là dòng khoảng 220VRMS, để công suất phía sơ cấp nhỏ nhất và tuyến tính nhất thì chọn dòng định mức Iin = 1.1mA => R5=200k ohm;Công suất tiêu thụ phía sơ cấp là 0.242W nên chọn điện trở R5 có công suất gấp 4 lần = 1W

Thông số cơ bản của ZMPT101B như bảng bên dưới

Tỉ lệ 1:1Dải điện áp vào 0-1000VĐiện áp cách ly 3000VACSai số tuyến tính <0.2%

Nhiệt độ hoạt động -40 đến 80 độ C

Trang 11

1.3.3 IC tính toán thông số điện

Đầu ra của khối biến đổi đòng điện sẽ đưa vào đầu vào kênh dòng V1P, V1N và đầu

ra khối biến đổi điện áp sẽ đưa vào đầu vào kênh áp V2P, V2N của ADE7753 Khi đó ADE7753 sẽ tính toán các thông số như giá trị hiệu dụng của dòng điện, điện áp, công suất tiêu thụ, công suất biểu kiển, tần số… Các thông số điện tính toán được sẽ được lưu vào các thanh ghi bên trong ADE7753 và có thể đọc ra thông qua giao tiếp SPI tương ứng với các trên DIN, DOUT, SCLK, CS [1]

Chân AVDD và AVDD được kết nối với nguồn 5V Các tụ điện C14, C15 được sử dụng để lọc nhiễu tần số thấp có thể đặt xa IC, tụ C11, C12 để lọc tần số cao nên được đặt gần chân nguồn IC, đảm bảo việc cung cấp đủ dòng điện, tránh sụt áp khi ADE7753 tính toán ở tần số xung nhịp cao Cuộn cảm L4 dùng để lọc nhiễu của nguồn cấp digital với nguồn cấp analog Giá trị của tụ điện C11, C12, C14, C15 được chọn theo sơ đồ mẫu trong datasheet ADE7753 DGND và AGND được ngăn cách bởi ferrit bead để tránh nhiễu của GND digital ảnh hưởng đến GND analog (hình 1.5)

Mạch dao động ngoài gồm X1, C9, C16 cấp cho ADE7753 qua chân CLKOUT, CLKIN được lựa chọn theo sơ đồ mẫu trong datasheet ADE7753 Tương tự C20, C21

Hình 1.5 Sơ đồ nguyên lý mạch đo thông số điện sử dụng ADE7753

Trang 12

kết nối với chân tham chiếu REF cũng được chọn theo sơ đồ mẫu trong datasheet ADE7753.

Chân RESET tích cực mức thấp của ADE7753 được nối với nút nhân SW1, điện trở R18 Ngoài ra để giảm xung dao động khi nhấn nút reset thì nút nhấn SW1 được mắc song song với tụ điện C19

Các chân tín hiệu ra DIN, DOUT, CLK, CS, IRQ, SAG, ZX, CF được kết nối với vi điều khiển thông qua các đầu jumper mục đích để tiện cho qua trình nạp code, debug cho vi điều khiển cũng như sử dụng các công cụ như logic analyzer hay osilocode để phân tích tín hiệu SPI Điện trở kéo có thể có hoặc không

Các thông số cơ bản của ADE7753 như bảng dưới

- Trở kháng đầu vào: 390kω

- Lỗi đo lường: 0,1%

- Điện áp - I/O cao: 2,4V

- Điện áp - I/O thấp: 0,8V

- Cung cấp hiện tại: 3mA

- Cung cấp điện áp: 4.75V ÷ 5.25V

- Nhiệt độ hoạt động: -40 ÷ 85 độ C

- Truyền thông nối tiếp SPI

1.4 Khối xử lý dữ liệu đo

Vi điều khiển ATMEA328 sẽ đọc dữ liệu liên quan đến dòng điện, điện áp hiệu dụng, công suất từ thanh ghi ADE7753 thông qua giao tiếp SPI Sau đó giá trị thanh ghi đọc được sẽ được nhân với hệ số, bù giá trị offset để được kết quả chính xác hơn

Chân RESET của vi điều khiển cũng được nối chung với nút nhấn của mạch RESET ADE7753 Chân XTAL1,2 nối với thạch anh 16MHz, tụ điện 22pF để cung cấp giao động ngoài Các chân AVCC, VCC, GND, AREF cung cấp nguồn, điện áp tham chiếu 5V cho vi điều khiển, ngoài ra cũng sử dụng thêm tụ 10uF, 100nF để đảm bảo sự ổn định của nguồn cấp (hình 1.6)

Trang 13

Các GPIO còn lại (bao gồm cả chân Analog) được kết nối với các chân giao tiếp SPI của ADE7753 (ngoài ra chân MISO, MOSI, CLK, RST được sử dụng để nạp chương trình bootloader), các chân điều khiển hiển thị LCD5110, các chân TX, RX để giao tiếp với khối wifi (cũng có thể dùng để nạp chương trình người dùng) Để cho mạch đơn gian để cho việc chuyển sử dụng nguồn cấp từ DVCC dùng nguồn 5V (chuyển đổi từ HLK5M05) hay từ 5V USB nạp code thì ta sẽ dùng jumper[2] (hình 1.6)

Thông số cơ bản của vi điều khiển ATMEGA328P-AU TQFP-32

Core: AVR 8-bit

Number of Timers: 3 Operating Supply Voltage: 1.8V to 5.5V

Hình 1.6 Sơ đồ nguyên lý khối xử lý dữ liệu đo

Trang 14

Data Converters: A/D 8x10b

Các chân chức năng của LCD5110 như bảng bên dưới

Hình 1.7 Mạch đo lường điện năng

Trang 15

Sử dụng module ESP32 để giao tiếp, đọc dữ liệu điện năng tính toán được từ vi điều khiển thông qua giao tiếp UART, và điều khiển, giám sát từ xa thông qua wifi Các thông

số cơ bản của esp32 devkit-V1 như bảng bên dưới

• CPU: Xtensa Dual-Core LX6 microprocessor Chạy hệ 32 bit

Trang 16

Maximum load: AC 250V/10A, DC 30V/10ATrigger current: 5mA

Working voltage: 5VModule size: 50 x 26 x 18.5mm

Mặc dù nguồn cho chân DC+, DC- là nguồn 5V nhưng ta vẫn có thể sử dụng GPIO của ESP32 (mức logic 3.3V) để điều khiển chân IN của relay Đầu ra của relay ta có thể lựa chọn NC (thường đóng) hoặc NO (thường mở) Có jumper để lựa chọn mức logic tích cực (level trigger options) cho đầu vào IN Bảng dưới mô tả các nguyên lý điều khiển relay

level trigger options IN NO NC

high low Disconnect to COM Connect to COM

high Connect to COM Disconnect to COMlow low Connect to COM Disconnect to COM

high Disconnect to COM Connect to COM

Trang 17

CHƯƠNG 2 THIẾT KẾ PHẦN MỀM CHO BO MẠCH

2.1 Giao tiếp với ADE7753

ADE7753 giao tiếp với ngoại vi thông qua cổng truyền thông SPI với bốn dây tín hiệu DIN, DOUT, SCLK, CS Việc giao tiếp giữa ADE7753 và ngoại vi được điều khiển bằng thanh ghi truyền thông 8 bits Bit MSB (Most Significant Byte) trong thanh ghi truyền thông sẽ quyết định hoạt động truyền dữ liệu tiếp theo sẽ là đọc hay ghi 6 bit LSB (Least Significant Byte) từ A0 đến A5 chứa địa chỉ của thanh ghi sẽ truy cập đến.Giao diện nối tiếp của ADE 7753 được tạo bởi 4 tín hiệu: SCLK, DIN, DOUT, và

CS Nhịp xung nối tiếp cho việc truyền dữ liệu được áp dụng qua chân logic vào SCLK Tất cả các hoạt động truyền dữ liệu đều được đồng bộ với xung clock nối tiếp Dữ liệu truyền vào ADE7753 thông qua chân DIN khi có sườn xuống của xung clock Dữ liệu truyền ra ngoài ADE7753 thông qua chân DOUT Chân CS là chân chọn chip Chân này được sử dụng khi có nhiều thiết bị cùng sử dụng giao diện nối tiếp ADE7753 giao tiếp với vi điều khiển ATMEGA328 thông qua giao tiếp SPI ở chế độ mode1 (CPOL=0, CPHA=1)

2.1.1 Quá trình ghi dữ liệu

Việc nhập dữ liệu nối tiếp liên tục được thực hiện như sau: Với ADE 7753 đang ở chế độ truyền thông, trước tiên phải nhập dữ liệu vào cho thanh ghi truyền thông Bit MSB đặt giá trị là 1, biểu thị hoạt động truyền dữ liệu là viết vào thanh ghi của ADE Các bit LSB sẽ định ra địa chỉ của thanh ghi được ghi tới ADE 7753 sẽ bắt đầu truyền

dữ liệu khi có xung sườn xuống của xung nhịp SCLK Trong một quá trình nhập dữ liệu vào cho ADE 7753, dữ liệu được truyền từng Byte một Sau khi 1 Byte đã được đưa vào cổng nối tiếp, sẽ có một thời gian hạn chế trước khi nó được chuyển đến một thanh ghi trên chip của ADE 7753 Mặc dù một Byte có thể chuyển đến cổng nối tiếp trong khi byte trước đó đang được đến một thanh ghi trên chip, hoạt động truyền byte này không nên kết thúc sớm hơn 4 µs sau khi byte trước đó được truyền đi (hình 2.1)

Trang 18

2.1.2 Quá trình đọc dữ liệu

Với ADE7753 trong chế độ truyền thông ( CS ở mức thấp) ghi 8 bit vào thanh ghi truyền thông diễn ra đầu tiên Bit MSB của byte truyền ở mức 0 chỉ ra rằng quá trình truyền tiếp theo là đọc, bit LSB của byte này chứa địa chỉ của thanh ghi mà để đọc ADE7753 bắt đầu di chuyển ra ngoài của thanh ghi dữ liệu trên sườn lên tiếp theo của SCLK ở thời điểm đó đầu ra logic DOUT không còn ở tình trạng trở kháng cao và bắt đầu chuyển lên bus dữ liệu Tất các các bit còn lại của thanh ghi dữ liệu chuyển ra ngoài trên sườn lên tiếp theo SCLK Giao diện nối tiếp chỉ nhập lại chế độ truyền thông ngay khi quá trình đọc hoàn thành Ở thời điểm đó đầu ra DOUT nhập giá trị trở kháng cao trên sườn xuống của SCLK cuối cùng Quá trình đọc có thể bị hủy bỏ bằng cách đặt đầu vào CS ở mức cao trước khi truyền dữ liệu hoàn thành, đầu ra DOUT nhận giá trị trở kháng cao trên sườn lên của CS (hình 2.2)

2.1.3 Một số thanh ghi của ADE7753

Trang 19

0x03 RAENERGY R 0x000000 24 Thanh ghi năng lượng tác

dụng (bị reset về 0 khi đọc)

ở chế độ tích lũy theo chu kỳ

(reset về 0 khi được đọc)

Trang 20

2.2.2 Bootloader của atmega328

Bootloader là một chương trình nhỏ được nạp sẵn vào chip vi điều khiển atmega328, nhờ đó bạn lập trình cho atmega328 một cách dễ dàng Nếu không có bootloader, bạn

sẽ không thể upload chương trình lên vi điều khiển atmega328 theo cách thông thường được, mà phải cần một số phần cứng khác hỗ trợ (gọi là Programmer) Do vậy trong lần nạp code đầu tiên ta không thể dùng mạch nạp USB-UART và arduino ide được mà phải dùng mạch nạp USBISP AVR programmer (hình 2.5) và phần mềm PROGISP

Hình 2.4 Chức năng của vùng trên arduino ide

Trang 21

Các bước biên dịch, nạp bootloader bằng arduino ide và phần mềm PROGISP sẽ trình bày trong phụ lục 1 Sau lần đầu tiên nạp bootloader thì lần nạp code sau ta có thể nạp code trực tiệp bằng arduino ide mà không cần thông qua phần mềm PROGISP nữa Cách nạp code này đơn giản như cách nạp code cho các board arduino UNO (nhưng nếu muốn vẫn có thể nạp code theo cách cũ là thông qua phần mềm PROGISP) Các bước nạp code bằng arduino ide và mạch nạp USB-UART sẽ được trình bày trong phụ lục 2 (chú ý cần cài đặt driver phù hợp trước khi sử dụng USBISP hay USB-UART).

2.2.3 Chương trình chính của ATMEGA328

Code của chương trình chính ATMEGA328 sẽ có ở phụ lục 3, ở đây sẽ chỉ trình bày lưu đồ của chương trình chính (hình 2.6) Lưu ý là sử dụng thư viện của bên thứ 3 để điều khiển LCD5110 cần tự cấu hình lại các GPIO giao tiếp giữa LCD5110 và ATMEGA328 trong file PCD8544.h và thiết lập lại mode của SPI là MODE1 trong file ADE7753.h [3]

Hình 2.5 Mạch nạp USB ISP AVR programmer

Trang 22

Dưới đây là các câu lệnh cơ bản (in đậm) và chú thích giải ý nghĩa của lệnh:

Hình 2.6 Lưu đồ chương trình ATMEGA328

Trang 23

cmake_minimum_required(VERSION 3.16)

Dòng đầu tiên sẽ định nghĩa phiên bản thấp nhất của CMake dành cho project này Cmake là công cụ kết với giúp hướng dẫn các trình biên dịch như gcc… biên dịch source code tạo ra file hex, bin… Cmake sẽ dẫn hữu ích nếu project có nhiều file code tổ chức phức tạp

Lệnh project() để đặt tên cho project là wifi_mqtt

Dưới đây là phần giải thích các từ khoá xuất hiện trong file CmakeList.txt:

target_compile_options

truyền các tuỳ chọn compiler khi tiến hành biện dịch source file

Trang 24

2.3.1.3 File main.c

File này sẽ chứa chương trình ứng dụng do người lập trình thiết lập lên esp32 Do nội dụng của file quá dài nên em sẽ trình bày phần giải thích code trong phụ lục 4 và ở đây em sẽ chỉ trình bày tổng quan chương trình trong file main.c:

• Khai báo các thư viện cần thiết: thư viện quen thuộc trong lập trình c, thư viện freeRTOS, thư viện event-system, thư viện uart, gpio, wifi, mqtt_client…

• Khai báo các macro cho GPIO, kích thước bộ nhớ, SSID, PASSWORD, khai báo các handle (đại diện) cho các class mqtt, queue

• Kiểm tra, khởi tạo tạo bộ nhớ NVS

• khởi tạo uart: baud rate, số bit data, parity, stop bit, hardware flow control, kích thước vùng nhớ đệm TX, RX

• Khởi tạo wifi: cấu hình esp32 ở chế độ station, ssid, password, phương pháp xác thực… thiết lập các handler-trình xử lý các sự kiện liên quan đến quá trình thiết lập wifi như sự kiện connect, got id, disconnect…

• Khởi tạo GPIO: lựa chọn number gpio, chế độ output, không ngắt, không

pull-up, không pull-down

• Cấu hình, khởi tạo mqtt client: xác định URI của MQTT broker, thiết lập trình

xử lý sự kiện-handler liện quan đến các sự kiện MQTT như: connect, disconnect, subcribe, unsubcribe, publish, data… Trong sự kiện data nhận được từ broker thì sẽ kiểm tra xem đó có phải là topic button và dữ liệu nhận được là ON hay OFF đế thay đổi trang thái GPIO đóng cắt relay cho phù hợp

• Khởi tạo tác vụ-task freertos xử lý các sự kiện liên quan đến uart, các sự kiện uart như: data, bộ nhớ đệm FIFO TX RX bị chàn, ngắt kết bối, error… Trong

sự kiện data esp sẽ phân tích chuỗi nhận được từ atmega328 và sẽ publish data vào các topic tương ứng (IRMS, VRMS, WATT)

2.3.2 Môi trường lập trình ESP32

Bên cạnh phương pháp lập trình phổ biến là thông qua arduino ide, thì ta có thể sử dụng Espressif IDF (IoT Development Framework) để lập trình Espressif IDF cung cấp công cụ để biên dịch cũng như thư viện hỗ trợ lập trình Còn việc soạn thảo code ta có thể lựa chọn bất kỳ như visual studio code, sublime text…

Trang 25

Chú khi cài đặt xong cần có tối thiểu một icon đó là ESP-IDF powershell (đôi khi sẽ

có thêm ESP-IDF CMD hay ESP-IDF eclipse)

Khi bật ESP-IDF powershell lên thì giao diện giao tiếp với phần mềm này theo kiểu dòng lệnh và dưới đây là các lệnh cơ bản sẽ dùng khi biên dịch và nạp code

• Lệnh “cd” để chuyển đến vị trí lưu project

• Lệnh “idf.py fullclean” để xoá đi các cài đặt cũ nếu ta bắt đầu xây dựng project mới từ việc copy một project khác có sẵn trước đó

• Lệnh “idf.py menuconfig” cài đặt các thông số của project như bộ nhớ flash, tốc độ, GPIO…

• Lệnh “idf.py build” để build project

• Lệnh “idf.py -p PORT flash monitor” để nạp code thông qua cổng-PORT (COM1, COM2…) đồng thời giám sát quá trình nạp và chạy của esp32

Trang 26

CHƯƠNG 3 THIẾT KẾ PHẦN MỀM GIÁM SÁT, ĐIỀU

KHIỂN TỪ XA

Có một số giải pháp quen thuộc để khi thiết kế phần mềm giám sát, điều khiển từ xa như thiết kế web hoặc thiết kế app trên điện thoại, thì trong báo cáo này em lựa chọn thiết kế app cho điện thoại android Do kiến thức còn hạn chế nên em sẽ tập tập trung vào giải thích các file và những đoạn code mà em thay đổi còn những đoạn code mặc định hay những file mà em không tác động đến thì sẽ không giải thích

3.1 Các file cần quan tầm trong project android

3.1.1 File build.gradle(:app)

Thông qua file này ta có thể chọn phiên bản compiler, cũng như tải các thư viện (module) của bên thư ba ở denpendencies Cụ thể là lựa chọn compileSDK 13 và tải thư viện thêm thư viện hỗ trỡ tạo MQTT client Sau khi thay đổi file này nhấn “sync now”

để build và tải thư viện Trong file này còn nhiều chức khác nữa nhưng trong project này em chỉ tác động vào 2 thuộc tính này

Trang 27

bố trí dưới dạng bảng (chia thành các cột và các hàng) Các hàng của tablelayout sẽ được xác định bởi số lượng thẻ tablerow và số lượng cột sẽ được xác định dựa vào số lượng view con lớn nhất của một tablerow Chiều cao của hàng phụ thuộc vào chiều cao lớn nhất của view con trong hàng, chiều rộng của cột phụ thuộc vào chiều rộng lớn nhất của view con trong cột Trong thẻ mở TableLayout thiết lập các thuộc tính chiều cao, chiều rộng của tablelayout bằng với màn hình (match_parents), thiết lập margin để cách các mép màn hình 5dp, stretchColumns = “1” để cột 1 kéo ra hết cỡ (các cột khác thu gọn vừa đủ chứa nội dung).

Trong cặp thẻ đóng mở TableLayout chứa các tablerow, bên trong các tablerow lại chứa các view con là textview và button

Trang 28

<TableRow> <TextView android:text="Họ và tên: Tạ Anh Tú "/></TableRow>

<TableRow> <TextView android:text="MSSV: 20174311 "/></TableRow>

<TableRow> <TextView android:text="Lớp: 726337 "/></TableRow>

<TableRow>

<TextView android:text=”VRMS" android:gravity="center"/>

<TextView android:text="225V" android:id="@+id/textviewVRMS"/>

</TableRow>

<TableRow>

<TextView android:text="IRMS" android:gravity="center"/>

<TextView android:text="0.02A" android:id="@+id/textviewIRMS"/>

</TableRow>

<TableRow>

<TextView android:text="WATT" android:gravity="center"/>

<TextView android:text="3W" android:id="@+id/textviewWatt"/>

</TableRow>

<TableRow>

<Button android:text="@string/text_button" android:id="@+id/btn_relay"/>

</TableRow>

Trang 29

Đoạn code trên thì các thẻ text view ta có thể thiết lập các thuộc tính như: nội dung chữ hiển thị, kích thước chữ, kiểu chữ in đậm (bold), căn view con vào giữa ô (gravity

= center), gộp 2 ô (span) Ngoài ra ta còn gán cho nó một id riêng biệt để gọi textview này từ file khác Tương tự với thẻ button ta cũng thiết lập nội dụng hiển thị trên nút nhấn

và cũng gán cho nó một id Sau khi thiết kế xong giao diện màn hình như hình 3.1:

3.1.3 File MainActivity.java

File này có vai trò giống như backend trong lập trình web, sẽ xử lý các sự kiện liên quan đến thao tác của người dùng như nhấn nút, cập nhật dữ liệu qua MQTT Do đoạn code khá dài nên em sẽ trình bày tổng quan còn phần code chi tiết sẽ để ở phụ lục 5

• Import các thư viện cần thiết: mqtt, textview, button, log…

• Khai báo các biến, đối tượng của các lớp mqttclient, button, textview

Hình 3.1 Giao diện màn hình

Trang 30

• Khi bật ứng dụng lên sự kiện oncreat xảy ra sẽ gọi đến main_activity.xml (file thiết kế iao diện); rồi kết nối với MQTT broker, subcribe các topic IRMS, VRMS, WATT;

• Thiết lập hàm xử lý sự kiện messageArrived xác dữ dữ liệu nhận được thuộc topic thì sẽ tiến hành cập nhật nội dung textview tương ứng

• Thiết lập hàm xử lý sự kiện nhấn nút setOnClickListener để khi nhân nút sẽ publishMessage với data là ON hoặc OFF đồng thời thay đổi nội dụng hiển thị trên nút là ON hoặc OFF [5]

• Thiết lập sự kiện thoát ứng dụng onDestroy: sẽ disconnect MQTT broker

3.1.4 File AndroidMainfest.xml

File này dùng để thiết lập chung cho toàn bộ project ví dụ như cấp quyền truy cập internet cho ứng dụng (uses permission INTERNET), thay đổi icon, label (tên) của ứng dụng, xác định activity chạy đầu tiên (một ứng dụng có thể có nhiều giao diện xml và cũng cần có nhiều activity tương ứng nên cần biết activity nào chạy đầu tiên)

Trang 31

3.2 Tạo project, xuất file apk

3.2.1 Tạo và build project, thiết lập máy ảo

Bước 1: file -> new -> new project

Bước 2: chọn loại thiết bị phone and tablet-> template của giao diện là empty activity-> next (hình 3.2)

</activity>

</application>

</manifest>

Trang 32

Bước 3: đặt tên project, nơi lưu trữ, ngôn ngữ lập trình java, lựa chọn api (api càng cao càng hỗ trỡ nhiều tính năng nhưng sẽ tương thích với ít thiết bị hơn) -> finish (hình 3.3)

Hình 3.2 Lựa chọn loại thiết bị, template cho giao diện

Hình 3.3 Lựa tên project, api

Trang 33

Để build project thì nhấn tổ hợp phím ctrl F9 Để tạo máy ảo để mổ phỏng ứng dụng

đã build successfully ta là các bước sau:

Bước 1: tool-> device manager->create device (trong mục virtual)

Bước 2: lựa chọn thiết bị mô phỏng (kích thước màn hình, độ phân giải) hình 3.4

Bước 3: lựa chọn hệ điều hành ->finish hình 3.5)

Hình 3.4 Lựa chọn thiết bị mô phỏng

Hình 3.5 Lựa chọn hệ điều hành cho điện thoại mô phỏng

Trang 34

Để chạy mô phỏng nhấn run (shift +F10), lựa chọn thiết bị trong danh sách thiết bị đã tạo->ok

3.2.2 Xuất file apk

Bước 1: Build-> generate signed bundle/apk, cứa sổ hiện lên chọn apk và nhấn next (hình 3.6)

Bước 2: tạo new key store, nhập đầy đủ thông tin vị trí lưu key store, password (password này liên quan đến đưa ứng dụng lên google play nên nếu quên mất password

sẽ không update được ứng dụng nữa) Tiếp tục đặt password alias (password key store của kho khoá là password dùng chung cho nhiều ứng dụng của bạn, password alias là mật khẩu cho từng ứng dụng vì một nhà phát triển có thể có nhiều ứng dụng nếu đắt password key store trùng với alias thì khi bán một ứng dụng đi có thể để lộ thông tin các ứng dụng khác), số năm hiệu lực… nhập xong nhấn ok, quan lại cửa số trước nhấn next [6] (hình 3.7)

Hình 3.6 Generate apk file

Ngày đăng: 13/03/2024, 16:26

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w