Thiết kế phần mềm cho vi điều khiển

Một phần của tài liệu điều khiển các thiết bị trong nhà qua sms (Trang 28 - 33)

2.6.3 .Giới thiệu MIDP

3.3.Thiết kế phần mềm cho vi điều khiển

3.3.1. Lựa chọn giải pháp

Modul sim 900B có thể sử dụng cả tin nhắn dạng text và dạng binary. Qua phân

tích 2 dạng tin nhắn này nhóm quyết định lựa chọn sử dụng dạng tin nhắn nhị phân do các đặc điểm như:

 Dễ dàng mã hóa cấu trúc tin nhắn theo ý muốn. Từ đó dễ dàng triển khai các biện pháp mã hóa làm tăng tính bảo mật của hệ thống.

 Dung lượng byte phải xử lý thấp nên phù hợp với các vi điều khiển có bộ nhớ nhỏ, từ đó có thể hạ giá thành sản phẩm.

Tuy nhiên để gửi tin nhắn dạng này thì khơng thể dùng các ứng dụng nhắn tin thông thường trên điện thoại di động được mà phải xây dựng riêng một ứng dụng gửi tin nhắn dạng nhị phân. Đây có thể coi là 1 điểm yếu, tuy nhiên theo thiết kế ban đầu của nhóm thì khơng thể thiếu phần mềm trên điện thoại. Do đó đây khơng cịn là điểm yếu của phương án này nữa mà còn giống như một lớp của vấn đề bảo mật (tính bảo mật cao hơn so với sử dụng tin nhắn dạng text thơng thường).

Phần mềm trên điện thoại nhóm lựa chọn viết bằng Java để có thể dễ dàng chạy

trên các điện thoại phổ thông hỗ trợ Java. Lựa chọn này giúp sản phẩm có thể đến được với nhiều người dùng hơn. Để phát triển trong tương lai có thể chuyển mã nguồn sang viết cho các nền tảng khác.

Để debug trên máy tính nhóm quyết định sử dụng driver viết bằng cổng COM ảo

chứ không sử dụng giao tiếp USB của PIC18F2550, tuy nhiên vẫn cắm bằng cáp USB. Lý do cho dự lựa chọn này là việc viết driver bằng cổng COM ảo dễ dàng hơn nhiều so với viết cho giao tiếp USB mà khi dùng để debug thì hiệu quả hồn tồn tương đương.

29

3.3.2. Thiết kế firmware

Hình 3.6.:Sơ đồ cấu trúc firmware của PIC18F2550.

A. Cấu trúc và các tiến trình của firmware

Trong đồ án này, nhóm đã cấu hình Module SIM900B được giao tiếp UART ở tốc độ 9.6 kbps, cấu hình chế độ giao tiếp text mode (CMGF = 1), định dạng kí tự đạng hexa (mỗi byte dữ liệu gửi về sẽ được mã hóa bằng hai kí tự biểu điện dưới hệ cơ số 16) (CSCS=”HEX”).

30 Các tiến trình của hệ thống được mơ tả chi tiết như sau:

Khởi động hệ thống:

 Gửi tín hiệu bật tới module SIM900B (PWRKEY).

 Chờ tín hiệu “RDY” module SIM đã bật và đường UART đã hoạt động.  Chờ tín hiệu “Call Ready” module SIM đã kết nối mạng thành cơng.

Chờ nhận tin nhắn:

Khi có tin nhắn mới thì SIM sẽ truyền chuỗi: +CMTI: <mem3>, <index>

<mem3> là bộ nhớ lưu trữ.

<index> là chỉ số tin nhắn lưu trong bộ nhớ.

Vi điều khiển sẽ đợi đến khi nhận được chuỗi này để thực hiện các tiến trình tương ứng.

Gửi lệnh đọc tin nhắn:

AT+CMGR=<index> Hồi đáp module SIM.

+CMGR: <stat>,<oa>,<scts> <data>

OK

<stat> trạng thái tin nhắn (REC UNREAD, REC READ, STO UNSENT, STO SEND, ALL)

<oa> địa chỉ gửi.

<scts> thời gian gửi từ service. <data> nội dung tin nhắn. (adsbygoogle = window.adsbygoogle || []).push({});

Thực hiện giải mả lệnh từ nội dung tin nhắn và thự hiện lệnh:

31

Gửi lệnh xóa tin nhắn:

Module SIM900B chỉ có 40 slot để lưu tin nhắn vì vậy sau khi tin nhắn đã được đọc ta sẽ thực hiện xóa tin nhắn để tránh bộ nhớ bị đầy sẽ không nhận được tin nhắn mới.

AT+CMGD=<index>,<delflags> <delflags>

0 xóa tin nhắn có vị trí lưu là <index> (mặc định)

1 xóa tồn bộ tin nhắn đã đọc (để lại các tin nhắn chưa đọc). 2 xóa tồn bộ tin nhắn đã đọc và tín nhắn đã gửi (để lại các

tin nhắn chưa đọc và các tin nhắn chưa gửi).

3 xóa tồn bộ tin nhắn đã đọc, tin nhắn đã gửi và chưa gửi, để lại các tin nhắn chưa đọc.

4 xóa tất cả các tin nhắn lưu trữ.

Sau khi xóa tin nhắn hệ thống sẽ quay về trạng thái chờ nhận tin nhắn mới gửi đến.

Lệnh gửi một tin nhắn:

AT+CMGS=<da><CR> <data><ctrl-Z/ESC> <da> địa chỉ nhận

<Ctrl-Z> (SUB có mã 0x1A) để gửi tin nhắn.

<ESC> (ESC có mã 0x1B) để hủy việc gửi tin nhắn.

Hồi đáp hệ thống:

Nếu gửi thành công: +CMGS: <mr> OK

32 Nếu có lỗi xảy ra:

+CMS ERROR: <err> B. Cấu trúc lệnh của hệ thống

Nhóm đã tiến hành mã hóa lệnh của hệ thống thành từng byte với cấu trúc sau nhằm tiện lợi trong quá trình xử lý.

Lệnh thay đổi trạng thái thiết bị của hệ thống:

Gồm có 3 byte: cmd[0] = 0x3A (‘:’)

//Tiền tố chỉ ra là lệnh đặt trạng thái. Onflags = cmd[1]

//chỉ ra vị trí các cổng thiết bị được bật tương ứng với trọng //số của bit đó.

Offflags = cmd[2]

//chỉ ra vị trí các cổng thiết bị sẽ được tắt tướng ứng với //trọng số của bit đó.

Trạng thái các thiết bị sau khi thực hiện lệnh:

State |= Onflags; State &= (~Offflags);

Lệnh xem trạng thái các cổng thiết bị hiện tại:

Là tin nhắn có nội dung bắt đầu bằng byte 0x3F (ký tự ‘?’). Hệ thống sẽ gửi lại tin nhắn có nội dung với 3 byte là: (adsbygoogle = window.adsbygoogle || []).push({});

0x3F, 0x3D, <State>

Trong đó State là các bit trạng thái hiện tại của hệ thống với quy ước “0” là thiết bị ở vị trí bit tương ứng đang tắt, “1” là thiết bị đang bật.

33

Một phần của tài liệu điều khiển các thiết bị trong nhà qua sms (Trang 28 - 33)