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

Buổi 4 lập trình trao Đổi dữ liệu với server (download) bài báo cáo

21 0 0
Tài liệu đã được kiểm tra trùng lặp

Đ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 đề Lập Trình Trao Đổi Dữ Liệu Với Server (Download)
Tác giả Nguyễn Xuân Duy, Phạm Hoàng Hùng, Nguyễn Vũ Anh Kiệt
Người hướng dẫn Phạm Quang Trí
Trường học Trường Đại Học Công Nghiệp Tp Hồ Chí Minh
Chuyên ngành Công Nghệ Điện Tử
Thể loại bài báo cáo
Năm xuất bản 2024
Thành phố Tp Hồ Chí Minh
Định dạng
Số trang 21
Dung lượng 8,55 MB

Nội dung

10% điểm Bảng phân công nhiệm vụ: Nguyễn Xuân Duy Nguyễn Vũ Anh Kiệt Phạm Hoàng Hùng -Nội dung báo cáo : Bài tập mức độ 3 Sử dụng hai mô-đun Raspberry Pi kết hợp với Grove Base Hat và

Trang 1

BỘ CÔNG THƯƠNGTRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TP HỒ CHÍ MINH

-Khoa: Công Nghệ Điện Tử

BUỔI 4: Lập trình trao đổi dữ liệu với

Server (Download)

BÀI BÁO CÁO

NHÓM 3

1 Nguyễn Xuân Duy 21135061

2 Phạm Hoàng Hùng 21098681

3 Nguyễn Vũ Anh Kiệt 21123591

Giảng viên : Phạm Quang Trí

Ngày hoàn thiện : /09/2024

Trang 2

NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN

Điểm lab report:

Trang 3

PHẦN BÀI LÀM THỰC HÀNH Yêu cầu 1: Bố cục, phân công nhiệm vụ từng thành viên, trình bày nội dung bài báo cáo (10%

điểm)

Bảng phân công nhiệm vụ:

Nguyễn Xuân Duy Nguyễn Vũ Anh Kiệt Phạm Hoàng Hùng

-Nội dung báo cáo : ( Bài tập mức độ 3 )

Sử dụng hai mô-đun Raspberry Pi kết hợp với Grove Base Hat và các mô-đun Grove phù hợp để viết chương trình điều khiển như sau:

o Mô-đun Raspberry 1: Thực hiện việc đọc giá trị nhiệt độ, độ ẩm của môi trường

và điện áp tạo ra bởi 1 biến trở sau mỗi 1 giây Đồng thời gửi dữ liệu trung bình sau mỗi

20 giây của nhiệt độ, độ ẩm, điện áp này và một tín hiệu ngẫu nhiên (có giá trị nằm trong khoảng 0 – 100) lên Server của ThingSpeak cho một gói tin và thực hiện liên tục trong ít nhất là 30 phút Tùy chọn sử dụng giao thức HTTP hoặc MQTT

o Mô-đun Raspberry 2: Thực hiện việc đọc dữ liệu nhiệt độ, độ ẩm, điện áp trung bình và tín hiệu ngẫu nhiên từ Server (dữ liệu nhiệt độ, độ ẩm, điện áp trung bình và tín hiệu ngẫu nhiên này do Raspberry 1 tạo ra) Dữ liệu nhiệt độ, độ ẩm, điện áp trung bình

và tín hiệu ngẫu nhiên này sẽ được in ra màn hình Terminal của mô-đun Raspberry và hiển thị trên LCD 16x2 Bắt buộc nhóm 1, 3, 5, 7, 9 và 11 sử dụng giao thức HTTP; nhóm 2, 4, 6, 8, 10 và 12 sử dụng giao thức MQTT

Ngoài ra, căn cứ trên các giá trị thu thập còn có thêm các tính năng sau:

 Nếu giá trị ngẫu nhiên đọc về có giá trị lớn hơn 50 thì bật LED thứ nhất, nhỏ hơn 50 thì tắt LED thứ nhất

 Nếu giá trị nhiệt độ trên 25OC thì bật LED thứ hai, dưới 24OC thì tắt LED thứ hai, còn lại các giá trị khác thì giữ nguyên trạng thái hiện tại của LED thứhai

 Nếu giá trị điện áp trên 2.0V thì bật LED thứ ba, dưới 1.8V thì tắt LED thứ ba, còn lại các giá trị khác thì giữ nguyên trạng thái hiện tại của LED thứ ba

 Nếu giá trị độ ẩm trên 90% thì bật Relay, dưới 60% thì tắt Relay, còn lại các giá trị khác thì giữ nguyên trạng thái hiện tại của Relay

o Bắt buộc phải có tập tin Log để ghi nhận lại các hoạt động trên mô-đun Raspberry 2

Trang 4

Yêu cầu 2: Sơ đồ nguyên lý chi tiết của hệ thống (bắt buộc vẽ bằng phần mềm Altium)

(15% điểm)

Yêu cầu 3: Lưu đồ giải thuật (bắt buộc vẽ bằng công cụ trực tuyến draw.io) (20% điểm)

LƯU ĐỒ CỦA PHẦN UPLOAD:

Trang 5

LƯU ĐỒ CỦA PHẦN DOWNLOAD:

Trang 9

Yêu cầu 4: Mã nguồn của chương trình (không chấp nhận hình chụp) (5% điểm)

CODE UPLOAD:

from urllib import request, parse

import time

from random import randint

from seeed_dht import DHT

from grove.adc import ADC

Trang 10

# Khởi tạo cảm biến DHT và biến trở

result_http = request.urlopen(req_push, data_http)

dien_ap = potentiometer_value / 3299 * 3.3 # Chuyển đổi giá trị ADC

for _ in range(20): # Doc gia tri trong 20 giay (1 giay mot lan)

if doam_gtri is not None and nhietdo_gtri is not None:

return tb_nhiet_do, tb_do_am, tb_dien_ap, random_gtri

while True:

tb_nhiet_do, tb_do_am, tb_dien_ap, random_gtri= read_th_random()

push_http({'field1': tb_nhiet_do, 'field2': tb_do_am, 'field3': tb_dien_ap, 'field4': random_gtri})

CODE DOWNLOAD:

from urllib import request

Trang 11

import json

from gpiozero import LED

from grove.display.jhd1802 import JHD1802

from grove.grove_relay import GroveRelay

from time import sleep

return tb_nhiet_do, tb_do_am, tb_dien_ap, random_gtri

def log_data(nhietdo, doam, dien_ap, random):

with open("log.txt", "a") as log_file:

log_file.write(f"Trung binh nhiet do: {tb_nhiet_do}, Trung binh do am:

{tb_do_am}, Trung binh dien ap: {tb_dien_ap}, Random: {random}\n")

while True:

tb_nhiet_do, tb_do_am, tb_dien_ap, random_gtri = get_http()

log_data(tb_nhiet_do, tb_do_am, tb_dien_ap, random_gtri)

Trang 12

Yêu cầu 5: Giải thích tác dụng của từng dòng mã nguồn được bổ sung vào (kể cả các

hàm, các chương trình con tham khảo ) (20% điểm)

CODE UPLOAD:

from urllib import request, parse

import time

from random import randint

from seeed_dht import DHT

from grove.adc import ADC

# Khởi tạo cảm biến DHT và biến trở

cambien = DHT('11', 18)

bienTro = ADC()

#Hàm gửi dữ liệu lên thingspeak bằng http

def push_http(data_http):

#Tạo một yêu cầu HTTP POST đến URL của ThingSpeak

req_push = request.Request('https://api.thingspeak.com/update', method='POST')

Trang 13

#Thêm các header cần thiết, như loại nội dung và API key của ThingSpeak để xác thực req_push.add_header('Content-Type', 'application/x-www-form-urlencoded') req_push.add_header('XTHINGSPEAKAPIKEY', 'H5HZDH744OCVHYXU')

#Mã hóa dữ liệu dưới dạng chuỗi URL

data_http = parse.urlencode(data_http).encode()

#Gửi yêu cầu HTTP với dữ liệu đã mã hóa

result_http = request.urlopen(req_push, data_http)

#Vòng lặp đọc giá trị cảm biến trong giây

for _ in range(20): # Doc gia tri trong 20 giay (1 giay mot lan)

#Kiểm nếu giá trị độ ẩm và nhiệt độ là hợp lệ

if doam_gtri is not None and nhietdo_gtri is not None:

#Thêm hai giá trị đo được vào danh sách tương ứng

gia_tri_nhiet_do.append(nhietdo_gtri)

gia_tri_do_am.append(doam_gtri)

#Kiểm nếu giá trị điện áp là hợp lệ

if dien_ap is not None:

#Thêm giá trị điện áp vào danh sách tương ứng

Trang 14

tb_nhiet_do = sum(gia_tri_nhiet_do) / len(gia_tri_nhiet_do) if gia_tri_nhiet_do else 0 tb_do_am = sum(gia_tri_do_am) / len(gia_tri_do_am) if gia_tri_do_am else 0 tb_dien_ap = sum(gia_tri_dien_ap) / len(gia_tri_dien_ap) if gia_tri_dien_ap else 0

#Tạo ra giá trị ngẫu nhiên từ 0-100

tb_nhiet_do, tb_do_am, tb_dien_ap, random_gtri= read_th_random()

#Gửi giá trị của các biến trên lên Thingspeak

push_http({'field1': tb_nhiet_do, 'field2': tb_do_am, 'field3': tb_dien_ap, 'field4': random_gtri})

CODE DOWNLOAD:

from urllib import request

import json

from gpiozero import LED

from grove.display.jhd1802 import JHD1802

from grove.grove_relay import GroveRelay

from time import sleep

#Khởi tạo các đối tượng màn hình lcd , led và relay

# Gửi yêu cầu và nhận phản hồi từ server

result_get = request.urlopen(req_get)

#Đọc dữ liệu trả về từ server và giải mã nó thành chuỗi văn bản

Trang 15

#Trả về giá trị của các biến

return tb_nhiet_do, tb_do_am, tb_dien_ap, random_gtri

#Hàm tạo file log

def log_data(nhietdo, doam, dien_ap, random):

#Mở file log.txt ở chế độ thêm nội dung

with open("log.txt", "a") as log_file:

#Ghi dữ liệu vào file log

log_file.write(f"Trung binh nhiet do: {tb_nhiet_do}, Trung binh do am:

{tb_do_am}, Trung binh dien ap: {tb_dien_ap}, Random: {random}\n")

#Vòng lặp chính

while True:

#Khai báo và gán giá trị đọc từ Thingspeak cho các biến tương ứng từ trái qua phải tb_nhiet_do, tb_do_am, tb_dien_ap, random_gtri = get_http()

#Gọi hàm log_data và truyền vào hàm các giá trị từ các biến để tạo file log

log_data(tb_nhiet_do, tb_do_am, tb_dien_ap, random_gtri)

#Nếu giá trị ngẫu nhiêu lớn hơn 50 thì bật led 1

Trang 16

#In tất cả giá trị của các biến lên màn hình Terminal

print("TB Nhiệt độ:",tb_nhiet_do,"TB Độ ẩm:",tb_do_am,"TB Điện áp:",tb_dien_ap," Random:",random_gtri)

#Tạm dừng chương trình trong 20s

sleep(20)

Yêu cầu 6: Minh chứng kết quả thực nghiệm (3 ảnh chụp mô hình khi đang vận hành)

(5% điểm)

Trang 21

Yêu cầu 7: Minh chứng kết quả thực nghiệm bằng cách quay 1 video clip và tải lên

Youtube (trong trường hợp minh chứng có nhiều video clip nhỏ thì sinh viên phải tự ghéplại thành 1 video clip tổng hợp) và ghi liên kết vào báo cáo Nội dung video gồm các phần:

o Thuyết minh giới thiệu về nhóm sinh viên và bài học (5% điểm)

o Thuyết minh mô tả quá trình thao tác thí nghiệm (5% điểm)

o Thuyết minh kết nối dây giữa Raspberry với ngoại vi (5% điểm)

o Thuyết minh những đoạn mã nguồn quan trọng để giải quyết yêu cầu bài tập (5% điểm)

o Thuyết minh đánh giá, nhận xét về kết quả (5% điểm)

Link youtube: https://youtu.be/j61UYIt-iyI

Ngày đăng: 27/12/2024, 15:25

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

TÀI LIỆU LIÊN QUAN