Bài tập lớn môn thiết kế ngoại vi và kĩ thuật ghép nối (1)

27 5 0
Bài tập lớn môn thiết kế ngoại vi và kĩ thuật ghép nối (1)

Đ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

BỘ THÔNG TIN VÀ TRUYỀN THÔNG HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THƠNG  BÁO CÁO MÔN HỌC MÔN HỌC: THIẾT KẾ NGOẠI VI VÀ KỸ THUẬT GHÉP NỐI Đề tài: Thiết kế hệ thống IoT nhỏ dựa vi điều khiển ESP32 Giảng viên: TS Trần Thúy Hà Nhóm tập: 13 Sv thực hiện: Đỗ Thị Thành – B18DCDT232 Bùi Đức Hinh – B18DCDT081 Trần Duy Khải – B18DCDT106 Nguyễn Văn Thanh – B18DCDT231 Trịnh Đức Tiệp – B18DCDT215 Hà Nội, 2022 Thiết kế ngoại vi kỹ thuật ghép nối GVHD: TS Trần Thúy Hà MỤC LỤC Thiết kế hệ thống IoT nhỏ Thiết kế ngoại vi kỹ thuật ghép nối GVHD: TS Trần Thúy Hà DANH MỤC HÌNH ẢNH DANH MỤC BẢNG BIỂU Thiết kế hệ thống IoT nhỏ Thiết kế ngoại vi kỹ thuật ghép nối GVHD: TS Trần Thúy Hà LỜI NÓI ĐẦU Mỗi giai đoạn phát triển lịch sử giới gắn liền với cách mạng khoa học kỹ thuật Và ngày nay, cách mạng Internet of Things tạo nên thay đổi đáng kể sống tương lai Với phát triển Internet, Smartphone đặc biệt thiết bị cảm biến, Internet of Things (IoT) trở thành xu hướng giới IOT mạng lưới vật thể gắn cảm biến hệ thống điện tử đặc biệt cho phép chúng kết nối với để thu thập trao đổi liệu Các vật thể mạng lưới kết nối với mạng Internet cho mục đích điều khiển giám sát từ xa Việc vào nhà, mở cửa, đèn tự động sáng chỗ ta đứng, điều hòa tự động điều chỉnh nhiệt độ, nhạc tự động bật lên, Những điều có phim khoa học viễn tưởng mà thường xem, dần trở thành thực với công nghệ IoT Trong sống thường nhật, quen thuộc với việc bật tắt thiết bị công tắc thông thường Hiện nay, bị chi phối nhiều thứ Việc khỏi nhà mà quên tắt đèn, điều hịa chuyện khơng gặp Với cơng tắc thông thường, rời khỏi nhà mà quên tắt thiết bị nhà Để tắt thiết bị cách quay trở lại nhà tắt chúng Điều gây cho nhiều phiền toái Để giải vấn đề trên, em lựa chọn đề tài: “Xây dựng hệ thống IoT nhỏ”, ứng dụng công nghệ IoT vào đời sống Giúp bật tắt thiết bị nhà lúc nơi Đây đề tài khơng mới, nhiều anh chị khóa trước thực Nhưng nhiều điểm cần cải thiện tốc độ đáp ứng điều khiển thiết bị giao diện điều khiển thiết bị Vì đề tài em trọng tâm thực việc cải thiện tốc độ điều khiển thiết bị lên mức tối đa có thể, xây dựng giao diện điều khiển thiết bị có tính thẩm mỹ thân thiện với người dùng Trong trình thực đề tài, nhóm em cố gắng để hồn thành cách tốt báo cáo, không tránh khỏi thiếu sót mong bạn tiếp tục góp ý để nhóm hồn thiện đề tài Xin chân thành cảm ơn Thiết kế hệ thống IoT nhỏ Thiết kế ngoại vi kỹ thuật ghép nối GVHD: TS Trần Thúy Hà CHƯƠNG I CƠ SỞ LÝ THUYẾT I Hệ điều hành FreeRTOS Khái niệm hệ điều hành thời gian thực Hệ thống thời gian thực hệ thống mà hoạt động tin cậy khơng phụ thuộc vào xác kết quả, mà cịn phụ thuộc vào thời điểm đưa kết quả, hệ thống có lỗi yêu cầu thời gian không thoả mãn Hình Hệ điều hành thời gian thực điều khiển Một RTOS thường có tính mềm dẻo có tính cấu trúc Nó cho phép tích hợp thêm dịch vụ gia tăng theo vòng tròn đồng tâm Vòng hay nhân cung cấp đặc tính quan trọng hệ điều hành thời gian thực Các đặc điểm khác thêm vào vịng ngồi cần thiết Nhân nhỏ RTOS thích hợp cho ứng dụng xử lý nhỏ, vịng ngồi giúp đỡ xây dựng hệ thống thời gian thực lớn Các RTOS thường cung cấp mức xử lý ưu tiên Các công việc ưu tiên cao thực trước Ngoài chức hệ điều hành trên, hệ điều hành thời gian thực hỗ trợ thêm chức sau: - Lập lịch phân chia thời gian sử dụng tài nguyên, đặt mức ưu tiên tác vụ - Truyền thông đồng tác vụ tác vụ ngắt - Phân phối nhớ động - Quản lý thiết bị vào Thiết kế hệ thống IoT nhỏ Thiết kế ngoại vi kỹ thuật ghép nối GVHD: TS Trần Thúy Hà Hình Sơ đị chức hệ điều hành thời gian thực Nhiều hệ điều hành không thời gian thực cung cấp nhân tương tự điểm khác biệt lớn hệ điều hành thời gian thực hệ điều hành không thời gian thực nói chung tính tiền định (deterministic) Thời gian tiền định tức dịch vụ hệ điều hành thực yêu cầu khoảng thời gian định, muốn tiền định tức phải tính tốn xác theo tốn học Các đáp ứng thời gian nghiêm ngặt hệ điều hành thời gian thực, khơng thể có thành phần thời gian ngẫu nhiên Với phần thời gian ngẫu nhiên tạo trễ ngẫu nhiên, từ gây đáp ứng deadline không thoả mãn Khái niệm FreeRTOS Hình Sơ đồ phát triển FreeRTOS FreeRTOS lõi hệ điều hành thời gian thực miễn phí Hệ điều hành Richard Barry cơng bố rộng rãi từ năm 2003, phát triển mạnh đến cộng đồng mạng mã nguồn mở ủng hộ FreeRTOS có tính khả chuyển, mã nguồn mở, lõi down miễn phí dùng cho ứng dụng thương mại Nó phù hợp với hệ nhúng thời gian thực nhỏ Hầu hết code viết ngơn ngữ C nên có tính phù hợp cao với nhiều khác Thiết kế hệ thống IoT nhỏ Thiết kế ngoại vi kỹ thuật ghép nối GVHD: TS Trần Thúy Hà Ưu điểm dung lượng nhỏ chạy mà nhiều hệ không chạy Có thể port cho nhiều kiến trúc vi điều khiển công cụ phát triển khác Mỗi port thức bao gồm ứng dụng ví dụ tiền cấu hình biểu riêng biệt lõi, kiến thức hướng phát triển Những hỗ trợ miễn phí cung cấp cộng đồng mạng Hỗ trợ thương mại với dịch vụ phát triển đầy đủ cung cấp FreeRTOS cấp giấy phép chỉnh sửa GPL (General Public License) sử dụng ứng dụng thương mại với giấy phép Ngoài liên quan đến FreeRTOS có OpenRTOS SafeRTOS OpenRTOS thương mại FreeRTOS.org khơng liên quan đến GPL SafeRTOS dựa FreeRTOS phân tích, chứng minh tài liệu kiểm tra nghiêm ngặt với chuẩn IEC61508 Và chuẩn IEC61508 SIL3 tạo phát triển độc lập để hoàn thiện tài liệu cho SafeRTOS Cụ thể hỗ trợ khác FreeRTOS OpenRTOS Bảng Các hỗ trợ khác từ FreeRTOS OpenRTOS đặc điểm RTOS Một RTOS ứng dụng thành công vào vi điều khiển thường phải bao gồm nhóm sau: • RTOS Kernel: nhân hệ điều hành, thực thi nhiệm vụ RTOS Kernel dùng chung cho tất platform cập nhật theo version • Port: thường phát triển nhà sản xuất MCU, khác họ MCU • BSP (Board Support Package): chứa hàm chức truy xuất đến ngoại vi, thực chất driver cho ngoại vi MCU Một RTOS tốt có nhân tốt, tài liệu tốt phân phát công cụ tốt để phát triển vận hành ứng dụng Vì vậy, tính tốn khoảng thời gian ngắt thời gian chuyển mạch ngữ cảnh quan trọng, với thông số khác làm nên RTOS tốt Xây dựng khối phần mềm RTOS tác vụ - task Việc tạo tác vụ RTOS đơn giản Một tác vụ đơn giản thủ tục Tại số điểm chương trình, thực nhiều lời gọi tới Các Thiết kế hệ thống IoT nhỏ Thiết kế ngoại vi kỹ thuật ghép nối GVHD: TS Trần Thúy Hà hàm RTOS để bắt đầu tác vụ Mỗi tác vụ RTOS luôn ba trạng thái chính: Hình Trạng thái tác vụ Running: Với ý nghĩa xử lý thực tác vụ Với xử lý chạy tác vụ thời điểm định • Ready: Với ý nghĩa số tác vụ khác sẵn sàng chạy xử lý rỗi • Blocked: Với ý nghĩa tác vụ không sẵn sàng chạy kể xử lý trạng thái nghỉ - Idle Tác vụ trạng thái chúng đợi kiện bên ngồi tác động để kích hoạt trở lại trạng thái sẵn sàng Các vấn đề FreeRTOS Các vấn đề FreeRTOS nằm vấn đề RTOS nói chung: • Đa nhiệm (Mutiltasking) • Bộ lịch trình(Scheduling) • Chuyển đổi ngữ cảnh (Context Switching) • Ứng dụng thời gian thực (Real Time Application) • Lập lịch thời gian thực (Real Time Scheduling) 4.1 Đa nhiệm Thuật ngữ kernel dùng để đến thành phần cốt lõi bên hệ điều hành Các hệ điều hành Linux sử dụng nhân kernel cho phép nhiều người dùng truy cập vào máy tính dường liên tục mặt thời gian Nhiều người dùng thi hành chương trình nhìn bề ngoại đồng thời với hệ điều hành Thực ra, chương trình thi hành nhiệm vụ phân chia điều khiển hệ điều hành Nếu hệ điều hành có khả thi hành nhiều tác vụ gọi đa nhiệm (multitasking) Sử dụng hệ điều hành đa nhiệm làm đơn giản q trình thiết kế tốn mà gánh nặng chuyển hết cho phần mềm ứng dụng xử lý Đa nhiệm tính liên lạc nội tác vụ hệ điều hành cho phép • Thiết kế hệ thống IoT nhỏ Thiết kế ngoại vi kỹ thuật ghép nối GVHD: TS Trần Thúy Hà ứng dụng phức tạp phân chia thành tác vụ nhỏ hơn, đơn giản hơn, dễ quản lý Các phần chia nhỏ giúp dễ dàng có kết trình kiểm tra phần mềm, sử dụng lại mã chương trình Những tính tốn thời gian phức tạp trình chi tiết tách biệt khỏi chương trình ứng dụng chuyển nhiệm vụ cho hệ điều hành đảm trách Thường vi xử lý thực tác vụ thời điểm với chuyển đổi cách nhanh tác vụ hệ điều hành đa nhiệm làm cho chúng dường chạy đồng thời với Điều mô tả sơ đồ với tác vụ giản đồ thời gian chúng Hình Sơ đồ phân chia thời gian tác vụ thực Lập lịch Bộ lịch trình phần nhân hệ điều hành chịu trách nhiệm định nhiệm vụ thi hành thời điểm Nhân kernel cho dừng tác vụ phục hồi lại tác vụ sau nhiều lần suốt q trình sống tác vụ Scheduling policy - chế lập lịch trình thuật tốn sử dụng lịch trình để định tác vụ thi hành thời điểm dịnh Cơ chế hệ thống nhiều người dùng (không phải thời gian thực) gần cho phép nhiệm vụ chiếm lĩnh hoàn toàn thời gian vi xử lý Còn chế hệ thời gian thực hay hệ nhúng mơ tả sau 4.2 Hình Sơ đồ chuyển giao tác vụ Các task 1, 2, có mức ưu tiên giảm dần tác vụ ưu tiên cao yêu cầu task ưu tiên thấp phải nhường • Tại (1), nhiệm vụ thứ thi hành Thiết kế hệ thống IoT nhỏ Thiết kế ngoại vi kỹ thuật ghép nối GVHD: TS Trần Thúy Hà Tại (2), nhân kernel dừng tác vụ • Tại (3), phục hồi lại tác vụ • Tại (4), tác vụ thi hành, cấm ngoại vi vi xử lý cho phép thân tác vụ truy cập vào • Tại (5), nhân kernel dừng tác vụ • Tại (6) phục hồi lại tác vụ • Tác vụ cố thử truy cập vào ngoại vi vi xử lý thấy bị cấm, khơng thể tiếp tục tự dừng vị trí (7)  Tại (8), nhân kernel phục hồi lại task • Tại (9), thời điểm tác vụ thi hành kết thúc với ngoại vi vi xử lý cho phép tác vụ khác truy cập • Thời điểm tiếp tác vụ thi hành thấy truy cập vào ngoại vi nên tiếp tục thực thi cho bị dừng nhân kernel 4.3 Chuyển đổi ngữ cảnh Khi tác vụ thi hành, sử dụng ghi truy cập vào ROM, RAM tác vụ khác Những tài nguyên bao gồm : ghi, RAM, ROM, stack gọi ngữ cảnh thực thi nhiệm vụ tác vụ Một tác vụ đoạn mã liên tục, không báo trước bị dừng phục hồi kernel Phân tích trường hợp mà tác vụ bị dừng cách tức thực lệnh cộng hai ghi vi xử lý Khi tác vụ bị dừng, tác vụ khác thi hành thay đổi giá trị ghi vi xử lý Dựa phục hồi tác vụ không nhận biết ghi vi xử lý bị thay đổi - sử dụng giá trị bị thay đổi dẫn đến kết sai Để ngăn chặn kiểu lỗi này, yếu tố cần thiết phục hồi tác vụ phải có ngữ cảnh đồng Nhân hệ điều hành chịu trách nhiệm xác định chắn trường hợp cần chuyển ngữ cảnh thực nhiệm vụ tác vụ bị dừng Khi tác vụ phục hồi, ngữ cảnh lưu lại trao trả cho tác vụ thực tiếp 4.4 Các ứng dụng thời gian thực Hệ điều hành thời gian thực thực đa nhiệm với nguyên lý đối tượng khác so với đối tượng hệ thời gian thực Sự khác biệt phản ánh chế lập lịch trình Hệ thời gian thực/ hệ nhúng thiết kế cho đáp ứng mặt thời gian thực kiện xảy giới thật Các kiện xảy giới thực có thời điểm kết thúc trước hệ nhúng/hệ thời gian thực phải đáp ứng chế lập lịch hệ RTOS phải xác định thời điểm kết thúc mà phải gặp Để thực mục tiêu trên, kỹ sư lập trình phải gán quyền ưu tiên cho tác vụ Sau chế lập lịch hệ RTOS đơn giản xác định tác vụ có quyền ưu tiên cao phép thi hành thời điểm xử lý Điều dẫn đến cần chia sẻ thời gian xử lý cách công tác vụ có ưu tiên sẵn sàng thực thi Tác vụ điều khiển có quyền ưu tiên cao vì: • Thời hạn cho tác vụ điều khiển có yêu cầu nghiêm ngặt tác vụ xử lý bàn phím • Hậu việc thời hạn kết thúc (dead line) tác vụ điều khiển lớn tác vụ xử lý phím 4.5 Bộ lập lịch thời gian thực • Thiết kế hệ thống IoT nhỏ 10 Thiết kế ngoại vi kỹ thuật ghép nối GVHD: TS Trần Thúy Hà tín hiệu 0, (tức bus mức 0), master hiểu slave có mặt q trình trao đổi liệu lại tiếp tục Ngược lại slave gửi tin hiệu ( bus mức 1) master hiểu khơng có thiết bị slave tồn dừng trình Với bảng giá trị thơi gian hai chế độ tiêu chuẩn chế độ nhanh sau: Bảng Bảng giá trị thời gian 2.2 Một số ứng dụng Do sử dụng dây để truyền liệu, nên thường ứng dụng vào thiết bị, cảm biến không yêu cầu tốc độ cao cảm biến nhiệt độ DS18B20, cảm biến độ ẩm III Chuẩn WIFI 802.11n Tổ chức chuẩn hóa IEEE 802 thức phê chuẩn chuẩn 802.11n cho Wi-Fi Bản dự thảo chuẩn 801.11n tốc độ cao đã thảo luậntrong thời gian gần năm Khi trở thành chuẩn thức, thiết bị chứng nhận đạt tiêu chuẩn 802.11n chí từ nhà cung cấp khác nhau, hoạt động với Dự kiến, chuẩn cuối công bố vào tháng 10 năm 2009 Việc chuẩn hóa IEEE đảm bảo tính tương thích thiết bị kết nối tốc độ cao Về mặt lý thuyết, cho phép kết nối với tốc độ 300 Mbps, tức nhanh khoảng lần tốc độ đỉnh theo lý thuyết chuẩn trước 802.11g/a (54 Mbps) Tốc độ điển hình cho chuẩn 802.11n kỳ vọng đạt khoảng 144 Mbps Thiết kế hệ thống IoT nhỏ 13 Thiết kế ngoại vi kỹ thuật ghép nối GVHD: TS Trần Thúy Hà Các định tuyến cung cấp hai luồng liệu không gian có tốc độ lớn theo lý thuyết lên tới 300 Mbps Còn định tuyến cung cấp luồng liệu khơng gian có tốc độ nhanh theo lý thuyết đạt 450 Mbps 600 Mbps Chuẩn 802.11n xây dựng chuẩn 82.11 trước cách thêm vào anten MIMO, kênh 40 MHz kết hợp khung lớp MAC • Anten MIMO sử dụng nhiều anten để gửi nhiều thông tin so với sử dụng anten Nó tạo phân tập anten ghép kênh khơng gian cho 802.11n • Chức ghép kênh phân chia theo không gian (SDM: Spatial Division Multiplexing) cho phép ghép nhiều luồng liệu độc lập kênh MIMO SDM làm tăng đáng kể tốc độ liệu số luồng liệu không gian tăng lên Với anten cho hai đầu cuối, chuẩn 802.11n cho tốc độ lên tới 600 Mbps • Các kênh 40 MHz, gấp đôi băng thông gấp đôi kênh 20 MHz sử dụng chuẩn 802.11a/g trước đó, kết hợp vào chuẩn 802.11n Điều cho phép tăng gấp đôi tốc độ liệu kênh đơn 20 MHz Thiết bị làm việc băng GHz 2.4 GHz Hình 10 Phân kênh băng tần 2,4 GHz cho Wi-Fi Tất nhiên khơng có nhiều khoảng trống băng tần 2,4 GHz cho chuẩn 802.11n cần tới kênh Hầu hết người sử dụng muốn sử dụng băng tần GHz để giảm can nhiễu từ sản phẩm Wi-Fi theo chuẩn 802.11b/g thiết bị vô tuyến khác băng tần 2.4 GHz Thiết kế hệ thống IoT nhỏ 14 Thiết kế ngoại vi kỹ thuật ghép nối GVHD: TS Trần Thúy Hà Hình 11 Phân kênh băng tần GHz cho Wi-Fi Bộ đinh tuyến 100-300 Mb/s chuẩn 802.11n giúp cho việc truy nhập internet nhanh người sử dụng có đường kết nối 10 Mb/s Tuy nhiên, chuẩn 802.11n kỳ vọng giúp ích cho việc kinh doanh giáo dục nơi mà hàng trăm người phải dùng chung một điểm truy cập cho phép chia file xử lý liệu nhanh hơn… • Ưu điểm 802.11n – tốc độ tối đa nhanh phạm vi tín hiệu tốt nhất; khả chống nhiễu tốt từ nguồn bên ngồi • Nhược điểm 802.11n – giá thành đắt 802.11g; việc sử dụng nhiều tín hiệu gây nhiễu với mạng dựa chuẩn 802.11b 802.11g gần 802.11n tiêu chuẩn công nghiệp IEEE truyền thông mạng không dây Wi-Fi Mặc dù 802.11n thiết kế để thay công nghệ Wi-Fi 802.11a, 802.11b 802.11g cũ hơn, thay chuẩn 802.11ac Mỗi tiêu chuẩn thường nhanh đáng tin cậy so với tiêu chuẩn trước Trên thiết bị Wi-Fi bạn mua phản ánh tiêu chuẩn hỗ trợ thiết bị Thiết kế hệ thống IoT nhỏ 15 Thiết kế ngoại vi kỹ thuật ghép nối GVHD: TS Trần Thúy Hà CHƯƠNG II NỘI DUNG ĐỀ TÀI I Mơ hình kiến Mơ hình trúc hệ thống Hình 12 Mơ hình kiến trúc Sơ đồ khối Hình 13 Sơ đồ khối hệ thống II Phân tích hệ thống Khi nạp xong firmware vào vi điều khiển esp32 thì: - ESP32 chạy chế độ wifi station (chuẩn 802.11n) để kết nối với wifi có ssid password đc định nghĩa code - Sau kết nối đc wifi esp đc cấp phát địa ip (đọc cmd) địa đc router cấp phát giao thức dhcp - ESP32 chạy web server trang web đc nhúng vào firmware esp32 truy cập vào trang web gg chrome (đây client) đường dẫn: địa ip/get vd: 192.168.1.110/get Thiết kế hệ thống IoT nhỏ 16 Thiết kế ngoại vi kỹ thuật ghép nối GVHD: TS Trần Thúy Hà - Sau chạy web server, esp32 tạo task để get post liệu thu thập từ cảm biến lên web ngược lại get liệu điều khiển từ web điều khiển màu led rgb dimmer led đơn - Cấu hình chạy wifi station hàm: wifi_station - Web đc nhúng vào esp32 câu lệnh file CmakeList.txt - ESP32 giao tiếp với dht11 giao thức onewire, dimmer led pwm, điều khiển màu led rmt (điều chế sóng theo tần số sóng mang 38kHz) - Giao thức truyền liệu qua mạng local giao thức http 1.1 (khơng bắt tay bước) nhanh k có bảo mật so với http 2.0 Thiết kế hệ thống IoT nhỏ 17 Thiết kế ngoại vi kỹ thuật ghép nối GVHD: TS Trần Thúy Hà CHƯƠNG III KẾT QUẢ THU ĐƯỢC I Code #include #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "freertos/event_groups.h" #include "esp_system.h" #include "esp_wifi.h" #include "esp_event.h" #include "esp_log.h" #include "nvs_flash.h" #include "lwip/err.h" #include "lwip/sockets.h" #include "lwip/sys.h" #include "lwip/netdb.h" #include "lwip/dns.h" #include "app_http_server.h" #include "ws2812b.h" #include "output_iot.h" #include "ledc_io.h" #include "dht11.h" /* The examples use WiFi configuration that you can set via project configuration menu If you'd rather not, just change the below entries to strings with the config you want - ie #define EXAMPLE_WIFI_SSID "mywifissid" */ #define EXAMPLE_ESP_WIFI_SSID "EXO" #define EXAMPLE_ESP_WIFI_PASS "24072000…" #define EXAMPLE_ESP_MAXIMUM_RETRY #define WEB_SERVER "api.thingspeak.com" #define WEB_PORT "80" static const char *TAG1 = "HTTP CLIENT"; Thiết kế hệ thống IoT nhỏ 18 Thiết kế ngoại vi kỹ thuật ghép nối GVHD: TS Trần Thúy Hà char REQUEST[512]; char SUBREQUEST[100]; char recv_buf[512]; /* FreeRTOS event group to signal when we are connected*/ static EventGroupHandle_t s_wifi_event_group; /* The event group allows multiple bits for each event, but we only care about two events: * - we are connected to the AP with an IP * - we failed to connect after the maximum amount of retries */ #define WIFI_CONNECTED_BIT BIT0 #define WIFI_FAIL_BIT BIT1 static const char *TAG = "wifi station"; static int s_retry_num = 0; // xử lý kiện log kiện hình static void event_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data) { if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) { esp_wifi_connect(); } else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) { if (s_retry_num < EXAMPLE_ESP_MAXIMUM_RETRY) { esp_wifi_connect(); s_retry_num++; ESP_LOGI(TAG, "retry to connect to the AP"); } else { xEventGroupSetBits(s_wifi_event_group, WIFI_FAIL_BIT); } ESP_LOGI(TAG,"connect to the AP fail"); } else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) { ip_event_got_ip_t* event = (ip_event_got_ip_t*) event_data; ESP_LOGI(TAG, "got ip:" IPSTR, IP2STR(&event->ip_info.ip)); // in d?a ch? ip s_retry_num = 0; Thiết kế hệ thống IoT nhỏ 19 Thiết kế ngoại vi kỹ thuật ghép nối GVHD: TS Trần Thúy Hà xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT); } } void switch_data_callback(int onoff) { output_io_set_level(2, onoff); } void slider_data_callback(int duty) { ESP_LOGI(TAG, "Duty: %d", duty); pwm_set_duty(duty); } void rgb_callback(int r, int g, int b) { ws2812_set_all_rgb(r,g,b); } // http 1.1 get static void http_get_task(void *pvParameters) { const struct addrinfo hints = { ai_family = AF_INET, ai_socktype = SOCK_STREAM, }; struct addrinfo *res; struct in_addr *addr; int s, r; char recv_buf[64]; while(1) { // connect int err = getaddrinfo(WEB_SERVER, WEB_PORT, &hints, &res); if(err != || res == NULL) { ESP_LOGE(TAG1, "DNS lookup failed err=%d res=%p", err, res); vTaskDelay(1000 / portTICK_PERIOD_MS); Thiết kế hệ thống IoT nhỏ 20 Thiết kế ngoại vi kỹ thuật ghép nối GVHD: TS Trần Thúy Hà continue; } /* Code to print the resolved IP Note: inet_ntoa is non-reentrant, look at ipaddr_ntoa_r for "real" code */ addr = &((struct sockaddr_in *)res->ai_addr)->sin_addr; ESP_LOGI(TAG1, "DNS lookup succeeded IP=%s", inet_ntoa(*addr)); s = socket(res->ai_family, res->ai_socktype, 0); if(s < 0) { ESP_LOGE(TAG1, " Failed to allocate socket."); freeaddrinfo(res); vTaskDelay(1000 / portTICK_PERIOD_MS); continue; } ESP_LOGI(TAG1, " allocated socket"); if(connect(s, res->ai_addr, res->ai_addrlen) != 0) { ESP_LOGE(TAG1, " socket connect failed errno=%d", errno); close(s); freeaddrinfo(res); vTaskDelay(4000 / portTICK_PERIOD_MS); continue; } ESP_LOGI(TAG1, " connected"); freeaddrinfo(res); // send http request // get data of DHT11 struct dht11_reading dht11; dht11 = DHT11_read(); float tem = dht11.temperature; float hum = dht11.humidity; // printf("tem: %f\thumi: %f\n", tem, hum); // creat REQUEST string sprintf(SUBREQUEST, "api_key=0HIGIP9U7GE6ATVP&field1=%f&field2=%f", tem, hum); Thiết kế hệ thống IoT nhỏ 21 Thiết kế ngoại vi kỹ thuật ghép nối GVHD: TS Trần Thúy Hà sprintf(REQUEST, "POST /update.json HTTP/1.1\nHost: api.thingspeak.com\nConnection: close\nContent-Type: application/x-www-formurlencoded\nContent-Length:%d\n\n%s\n",strlen(SUBREQUEST),SUBREQUEST); // sprintf(REQUEST, "GET https://api.thingspeak.com/channels/1554251/feeds.json? api_key=ECHMC0DU6G3VEECL&results=2\n\n"); if (write(s, REQUEST, strlen(REQUEST)) < 0) { ESP_LOGE(TAG1, " socket send failed"); close(s); vTaskDelay(4000 / portTICK_PERIOD_MS); continue; } ESP_LOGI(TAG1, " socket send success"); // set timeout for receiver response struct timeval receiving_timeout; receiving_timeout.tv_sec = 5; receiving_timeout.tv_usec = 0; if (setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &receiving_timeout, sizeof(receiving_timeout)) < 0) { ESP_LOGE(TAG1, " failed to set socket receiving timeout"); close(s); vTaskDelay(4000 / portTICK_PERIOD_MS); continue; } ESP_LOGI(TAG1, " set socket receiving timeout success"); // Read response /* Read HTTP response */ { bzero(recv_buf, sizeof(recv_buf)); r = read(s, recv_buf, sizeof(recv_buf)-1); for(int i = 0; i < r; i++) { putchar(recv_buf[i]); } } while(r > 0); // delay 10s ESP_LOGI(TAG1, " done reading from socket Last read return=%d errno= Thiết kế hệ thống IoT nhỏ 22 Thiết kế ngoại vi kỹ thuật ghép nối GVHD: TS Trần Thúy Hà %d.", r, errno); close(s); for(int countdown = 10; countdown >= 0; countdown ) { ESP_LOGI(TAG1, "%d ", countdown); vTaskDelay(1000 / portTICK_PERIOD_MS); } ESP_LOGI(TAG1, "Starting again!"); } } // cấu hình wifi station void wifi_init_sta(void) { s_wifi_event_group = xEventGroupCreate(); ESP_ERROR_CHECK(esp_netif_init()); ESP_ERROR_CHECK(esp_event_loop_create_default()); esp_netif_create_default_wifi_sta(); wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); ESP_ERROR_CHECK(esp_wifi_init(&cfg)); esp_event_handler_instance_t instance_any_id; esp_event_handler_instance_t instance_got_ip; ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &event_handler, NULL, &instance_any_id)); ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &event_handler, NULL, &instance_got_ip)); wifi_config_t wifi_config = { sta = { ssid = EXAMPLE_ESP_WIFI_SSID, Thiết kế hệ thống IoT nhỏ 23 Thiết kế ngoại vi kỹ thuật ghép nối GVHD: TS Trần Thúy Hà password = EXAMPLE_ESP_WIFI_PASS, threshold.authmode = WIFI_AUTH_WPA2_PSK, pmf_cfg = { capable = true, required = false }, }, }; ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA) ); ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config) ); ESP_ERROR_CHECK(esp_wifi_start() ); ESP_LOGI(TAG, "wifi_init_sta finished."); EventBits_t bits = xEventGroupWaitBits(s_wifi_event_group, WIFI_CONNECTED_BIT | WIFI_FAIL_BIT, pdFALSE, pdFALSE, portMAX_DELAY); if (bits & WIFI_CONNECTED_BIT) { ESP_LOGI(TAG, "connected to ap SSID:%s password:%s", EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS); } else if (bits & WIFI_FAIL_BIT) { ESP_LOGI(TAG, "Failed to connect to SSID:%s, password:%s", EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS); } else { ESP_LOGE(TAG, "UNEXPECTED EVENT"); } /* The event will not be processed after unregister */ ESP_ERROR_CHECK(esp_event_handler_instance_unregister(IP_EVENT, IP_EVENT_STA_GOT_IP, instance_got_ip)); ESP_ERROR_CHECK(esp_event_handler_instance_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID, instance_any_id)); vEventGroupDelete(s_wifi_event_group); Thiết kế hệ thống IoT nhỏ 24 Thiết kế ngoại vi kỹ thuật ghép nối GVHD: TS Trần Thúy Hà switch_set_callback(switch_data_callback); slider_set_callback(slider_data_callback); rgb_set_callback(rgb_callback); start_webserver(); } void app_main(void) { //Initialize NVS esp_err_t ret = nvs_flash_init(); // chứa cấu hình phần cứng wifi if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) { ESP_ERROR_CHECK(nvs_flash_erase()); ret = nvs_flash_init(); } ESP_ERROR_CHECK(ret); output_io_create(2); pwm_init(2); // khởi tạo hàm DHT11_init(4); // khởi tạo chân dht11 ws2812_init(23,8); // khởi tạo module ws2812b chân số 23, led ws2812_set_all_rgb(255,0,0); //r = 255, g = 0, b = ESP_LOGI(TAG, "ESP_WIFI_MODE_STA"); wifi_init_sta(); vTaskDelay(10000/portTICK_PERIOD_MS); xTaskCreate(&http_get_task, "http_get_task", 4096, NULL, 5, NULL); // t?o task } II Sản phẩm thực tế Thiết kế hệ thống IoT nhỏ 25 Thiết kế ngoại vi kỹ thuật ghép nối GVHD: TS Trần Thúy Hà Hình 14 sản phẩm thực tế Thiết kế hệ thống IoT nhỏ 26 Thiết kế ngoại vi kỹ thuật ghép nối GVHD: TS Trần Thúy Hà BẢNG PHÂN CÔNG CÔNG VIỆC Họ tên Trần Duy Khải (Nhóm trưởng) Mã sinh viên B18DCDT106 Đỗ Thị Thành B18DCDT232 Bùi Đức Hinh B18DCDT081 Nguyễn Văn Thanh B18DCDT231 Trịnh Đức Tiệp B18DCDT215 Thiết kế hệ thống IoT nhỏ Cơng việc - Tìm hiểu phân tích nội dung đề tài - Lập trình/code để test module mạch - Xây dựng sở liệu/Websize hiển thị - Tổng hợp word, làm slide - Hệ điều hành FreeRTOS - Lắp ráp mơ hình/test mạch thực tế - Giao thức tầng thiết bị One Wire - Hỗ trợ code để test module mạch - Giao thức kết nối: wifi chuẩn 802.11n 27 ... phẩm thực tế Thiết kế hệ thống IoT nhỏ 25 Thiết kế ngoại vi kỹ thuật ghép nối GVHD: TS Trần Thúy Hà Hình 14 sản phẩm thực tế Thiết kế hệ thống IoT nhỏ 26 Thiết kế ngoại vi kỹ thuật ghép nối GVHD:.. .Thiết kế ngoại vi kỹ thuật ghép nối GVHD: TS Trần Thúy Hà MỤC LỤC Thiết kế hệ thống IoT nhỏ Thiết kế ngoại vi kỹ thuật ghép nối GVHD: TS Trần Thúy Hà DANH MỤC HÌNH ẢNH DANH MỤC BẢNG BIỂU Thiết. .. phím • Hậu vi? ??c thời hạn kết thúc (dead line) tác vụ điều khiển lớn tác vụ xử lý phím 4.5 Bộ lập lịch thời gian thực • Thiết kế hệ thống IoT nhỏ 10 Thiết kế ngoại vi kỹ thuật ghép nối GVHD: TS

Ngày đăng: 10/06/2022, 09:20

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan