Tải bản đầy đủ (.docx) (22 trang)

NGHIÊN CỨU LẬP TRÌNH NODE ĐIỀU KHIỂN THIẾT BỊ SỬ DỤNG TI RTOS

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.01 MB, 22 trang )

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA KỸ THUẬT MÁY TÍNH
--------------------------------

NGHIÊN CỨU LẬP TRÌNH NODE
ĐIỀU KHIỂN THIẾT BỊ SỬ DỤNG TI-RTOS

BÁO CÁO THỰC TẬP DOANH NGHIỆP
SV thực hiện: Nguyễn Văn Bình

Thành phố Hồ Chí Minh – Năm 2016


MỤC LỤC

NỘI DUNG BÁO CÁO

Phần 1: Giới thiệu
1.1. Lịch thực tập tại công ty.
-

-

Các ngày trong tuần: thứ 4, thứ 5, thứ 6
Thời gian:
Sáng: 8h30 đến 11h30
Chiều: 13h30 đến 17h30
Ngoài ra còn có thể thực tập vào các ngày khác trong tuần tùy theo tiến độ công
việc yêu cầu.

1.2. Công ty cổ phần VSMARTTEK JSC.


1.2.1. Giới thiệu chung về công ty.
Công ty TNHH nghiên cứu và phát triển VSMARTTEK được thành lập từ năm
2013 bởi một nhóm cựu sinh viên trường Đại học Công Nghệ Thông Tin –
ĐHQG TP.HCM với ý tưởng hiện thực hóa một giải pháp công nghệ nhà thông
minh có thể giúp cho mỗi gia đình Việt Nam có thể hưởng thụ những tiện ích do
công nghệ mang lại trong cuộc sống thường nhật trong chính căn nhà của mình
với mức giá hợp lý nhất.
Để duy trì những thành quả thu được trong giai đoạn nghiên cứu và phát triển
sản phẩm và tiếp tục phát triển công ty trong giai đoạn mới, kêu gọi được nhiều
nhà đầu tư tiềm năng chung tay trong việc đưa những sản phẩm công nghệ của
người Việt Nam đến tay người tiêu dùng, tháng 4 năm 2016 công ty
VSMARTTEK đã thay đổi mô hình hoạt động sang công ty cổ phần, mở thêm
lĩnh vực hoạt động kinh doanh sản xuất. Hiện nay công ty cổ phần
VSMARTTEK (VSMARTTEK JSC) là một doanh nghiệp hoạt động trong lĩnh
vực IoT (Internet of Things – Vạn vật kết nối Internet), chuyên cung cấp các


giải pháp công nghệ, thiết bị, dịch vụ kỹ thuật về nhà thông minh và điều khiển
tự động thông qua kết nối không dây.
Website công ty: vsmarttek.net
1.2.2. Lĩnh vực hoạt động chính.
Công ty cổ phần VSMARTTEK tập trung phát triển theo lĩnh vực chính là hệ
thống nhà thông minh. Hệ thống nhà thông minh VSMARTTEK cũng cung cấp
cho người dùng các số liệu môi trường trong ngôi nhà như nhiệt độ, độ ẩm, chất
lượng không khí… để đảm bảo môi trường sống hợp lý nhất cho người dùng.
Một điểm đáng chú ý khác của giải pháp nhà thông minh VSMARTTEK là hệ
thống giám sát an ninh bao gồm các camera, cảm biến di chuyển, cảm biến cửa
và các thiết bị khác cho phép người dùng phát hiện mọi nguy cơ an ninh tiềm
ẩn, từ đó đề ra những phương án bảo vệ và chống đột nhập thích hợp. Tất cả
những tiện ích trên đều được gói gọn trong phần mềm điều khiển trên các thiết

bị thông minh như điện thoại thông minh, máy tính bảng cho phép người dùng
thao tác mọi lúc mọi nơi thông qua kết nối Internet.

Phần 2: Công việc được giao.
2.1. Công việc chính.
-

Tên đề tài:
Nghiên cứu lập trình một node điều khiển thiết bị qua Wifi. Node hoạt động
theo như mô hình sau:




Device Node sẽ kết nối với Access Point qua chuẩn bảo mật WiFi Protected
Access (WPA).



Khi thiết điều khiển ( laptop, máy tính bảng, smart phone) sẽ kết nối với
Access point gửi lệnh điều khiển tới Device Node thông qua giao thức truyền
thông UDP khi đó thiết bị (đèn, quạt,…) sẽ được điều khiển thực hiện chức

năng theo lệnh điều khiển tương ứng.
 Device Node giống như 1 công tắc cớ điều khiển thiết bị thông thường.
-

Mục tiêu đề tài: lập trình firmware cho một node điều khiển thiết bị không dây

qua Wifi trên nền tảng hệ điều hành thời gian thực TI-RTOS.

- Các chức năng chính của sản phẩm sau khi hoàn thiện:
 Cho phép điều khiển thiết bị bằng tay tương tự như các công tắc thông thường.
 Cho phép điều khiển thiết bị thông qua wifi nhờ giao thức UDP. Phản hồi lại trạng thái
thiết bị cho người dùng.
 Lưu lại trạng thái của thiết bị vào bộ nhớ non-volatile và phục hồi lại trạng thái trước

đó khi khởi động lại.
2.2. Các công việc chi tiết.
-

Tìm hiểu về module Wifi TI CC3200 và hệ điều hành thời gian thực TI-RTOS.
Tìm hiểu về các API TI-RTOS để phục vụ việc lập trình đa luồng.
Xây dựng lưu đồ giải thuật tổng quan.


-

Lập trình task thực hiện chức năng điều khiển bằng tay sử dụng cảm biến điện

-

dung.
Lập trình các task liên quan UDP socket để phục vụ chức năng điều khiển từ xa

-

và phản hồi trạng thái qua Wifi.
Tìm hiểu về file system của module Wifi CC3200 và lập trình các chức năng
lưu trữ và phục hồi trạng thái của node.


Phần 3: Thực hiện các công việc.
3.1. Tìm hiểu lý thuyết.
3.1.1. Tìm hiểu về chip CC3200 SimpleLink™ Wi-Fi

Hình 2: Chip CC3200 SimpleLink™ Wi-Fi
- Chip Wireless MCU CC3200 là đơn chip cho vi điều khiển (MCU -

microcontroller unit ) kết nối Wifi do TI (Texas Instruments ) nghiên cứu và
phát triển.
- CC3200 SimpleLink™ Wi-Fi là một MCU không dây tích hợp một hiệu cao

ARM Cortex-M4 32bit-80HZ, 256KB RAM.
3.1.2. TI-RTOS.
- TI-RTOS là một hệ điều hành thời gian thực cho vi điều khiển TI (Texas

Instruments ).
- TI-RTOS cho phép phát triển nhanh hơn bằng cách loại bỏ sự cần thiết cho
các nhà phát triển để viết và duy trì hệ thống phần mềm như lập lịch
( schedule ), giao thức ngăn xếp ( protocal stacks ) và trình điều khiển.
- Kết hợp thời gian thực hiện đa nhiệm giữa nhân ( kernel ) với các thành phần
trung gian như TCP/IP và ngăn xếp USB, tập tin hệ thống FAT và các thiết bị
điều khiển, cho phép đa dạng ứng dụng.


- TI-RTOS cung cấp một nền tảng phần mềm nhúng phù hợp trên các thiết bị

vi điều khiển của TI, nên dễ dàng kế thừa ứng dụng trên các thiết bị mới.
- Các thành phần của TI-RTOS:
 TI-RTOS Kernel - SYS/BIOS: là một nhân (kernal) thời gian thực có khả
năng mở rộng. Được thiết kế để hỗ trợ các ứng dụng đòi hỏi phải lập kế

hoạch thời gian thực, đồng bộ hóa, thời gian thực đo lường. Cung cấp độ
ưu tiên đa luồng, trừu tượng phần cứng, phân tích thời gian thực. SYS /
BIOS được thiết kế để giảm thiểu yêu cầu bộ nhớ và CPU.
 TI-RTOS Instrumentation - UIA: Các Instrumentation Architecture
Unified (UIA) cung cấp mục tiêu nội dung hỗ trợ trong việc tạo ra và thu
thập dữ liệu đo lường.
 TI-RTOS Networking - NDK: Network Developer's Kit (NDK) là nền tảng
phát triển các ứng dụng mạng trên bộ xử lí nhúng của TI.
 TI-RTOS Network Services: Cung cấp giao thức các lớp ứng dụng mạng
như là HTTP Client và SNTP Client.
 TI-RTOS File System: hỗ trợ tập tin hệ thống FAT.
- Tìm hiểu API sử dụng TI-RTOS trên CC3200.
 Tìm hiểu lập trình Task trên CC3200 sử dụng flatform TI-RTOS
 Hàm tạo task: OsiReturnVal_e osi_TaskCreate(){}
OsiReturnVal_e osi_TaskCreate(P_OSI_TASK_ENTRY pEntry,
const signed char*const pcName,unsigned short usStackDepth,
void *pvParameters,unsigned long uxPriority,
OsiTaskHandle *pTaskHandle);
Tham số:
pcName:
kiểu chuổi kí tự, Tên của Task.
pvParameters: con trỏ đến cấu trúc để được thông qua các hàm Task.
pTaskHandle: task sử lí thường mặc định là null.
pEntry:
con trỏ trỏ tới hàm Task để thực thi Task.
uxPriorit:
mức độ ưu tiên của task trong quá trình thực thi.
usStackDepth: kích thước Stack. Kiểu dữ liệu long 32-bit.
 Hàm xóa task: void osi_TaskDelete(OsiTaskHandle* pTaskHandle);
Tham số: pTaskHandle là con trỏ trỏ tới task cần được xóa.

 Tìm hiểu API với Message Queue trên CC3200.
 Hàm tạo queue: OsiReturnVal_e osi_MsgQCreate (OsiMsgQ_t* pMsgQ,


char* pMsgQName, unsigned long

MsgSize, unsigned long

MaxMsgs);
 Hàm ghi queue: OsiReturnVal_e osi_MsgQWrite (OsiMsgQ_t* pMsgQ,


void* pMsg , OsiTime_t Timeout);
Hàm đọc queue: OsiReturnVal_e osi_MsgQRead (OsiMsgQ_t* pMsgQ,

void* pMsg , OsiTime_t Timeout);
 Hàm xóa queue: OsiReturnVal_e osi_MsgQDelete (OsiMsgQ_t* pMsgQ);
3.2. Xây dựng lưu đồ thuật toán tổng quan đề tài.
-

Device Node được lập trình theo lưu đồ.

Hình 2: Lưu đồ thuật toán tổng quan đề tài
-

Giải thích lưu đồ:


B1: Bắt đầu.
B2: Khởi board CC3200.

B3: Khởi tạo Flatform TI-RTOS cho board CC3200.
B4: Khởi tạo UART để debug.
B5: Tạo Scheduler để lập lịch cho Task thực thi.
B6: Kiểm tra tạo Scheduler cho task có thành công hay không. Nếu thành
công chuyển sang bước B7, ngược lại kết kết thúc chương trình.
B7: Tạo message queue cho task thực thi. Nếu thành công chuyển qua bước
tiếp theo B8, ngược lại kết thúc chương trình.
B8: Tạo task thực thi cho UDP Server.
B9: Tạo task thực thi cho UDP Client.
B10: Tạo task thực thi điều khiển thiết bị.
B11: Bắt đầu task Scheduler. Các task được thực thi riêng biệt.
3.3. Lập trình các module.
-

Để chạy thử code trong quá trình phát triển, lập trình các module thì một
board CC3200 launchpad kết nối với 1 daughter board touch sensor được sử
dụng.

Hình 3: Board launchpad và daughter board touch sensor
- Sau khi đã kiểm thử các chức năng lập trình thì sẽ sử dụng một board thiết bị

do công ty cung cấp để chạy thử toàn bộ các chức năng.


Hình 4: Board thiết bị nạp code ( Device Node )

3.3.1. Nghiên cứu lập trình Touch cảm biến điều khiển thiết bị.
- Để Device Node cho phép người dùng điều khiển thiết bị bằng cảm ứng điện

dung. Ta xây dựng lập trình module theo lưu đồ sau.



Hình 5: Lưu đồ lập trình Touch cảm biến
- Giải thích lưu đồ:

B1: Bắt đầu chương trình.
B2: Kiểm tra Touch Sensor đã được hoạt động hay chưa. Nếu Touch
Sensor đã hoạt động thực hiện bước B3, ngược lại tiếp tục kiểm tra Touch
Sensor.
B3: Cấu hình Touch Sensor.
B4: Kiểm tra Touch Sensor cấu hình có thành công hay không. Nếu thành
công chuyển sang bước B5, ngược lại trở lại cấu hình lại Touch Sensor .
B5: Đọc trạng thái đầu vào của Touch Sensor.
B6: Kiểm tra Touch có thay đổi trạng thái hay không. Nếu có sự thay đổi
thực hiện bước B7, ngược lại tiếp tục đọc trạng thái Touch.
B7: Điều khiển thiết bị tương ứng.


- Module được thực thi trong hàm chính void ControlTouch(void) {} hàm sẽ

thực thi khởi tạo, cấu hình phần cứng cho Touch cảm biến diện dung, nhận
tín hiệu cảm ứng đầu vào, điều khiển thiết bị nhờ lập trình API cho các IO.
Sau khi Touch hoạt động cảm biến điện dung sẽ được cấu hình bởi hàm:



void ConfigTouchSensor(void){}
Tham số: không có tham số.
Chức năng: Kích hoạt tính năng cảm biến đầu vào, vô hiệu hóa mạch đa
cảm ứng, thiết lập giá trị touch cấu hình thanh ghi mặc định, thay đổi độ

nhạy cảm ứng, vô hiệu hóa tỷ lệ lặp lại của cảm biến, thiết lập lại thanh ghi
trạng thái, đặt lại trạng thái thanh ghi chung, đặt lại thanh ghi điều khiển
chính.
 Touch cảm ứng điện dung sẽ được khởi tạo sau khi Touch đã hoạt động:
void InitDevHardware(void){}
Tham số: không có tham số.
Chức năng hàm: Gọi hàm ConfigTouchSensor() cấu hình cảm biến điện
dung CAP1298 và hàm InitI2Cmastr() khởi tạo bus I2C trên CC3200 để
giao tiếp với các thiết bị I2C Slave để thiết lập cấu hình ban đầu cho touch.
Gọi hàm khôi phục trạng thái của touch và thiết bị đã được lưu. Thiết lập
các kênh cảm biến đầu vào.
- Trong module cảm biến diện dụng sẽ giao tiếp với CC3200 qua giao tiếp

ngoại vi I2C để nhận và truyền tín hiệu điều khiển đầu vào điều khiển thiết
bị. Các hàm lập trình API với I2C là:
 Hàm khởi tạo giao tiếp I2C: void InitI2CMastr(void){}
Tham số: không có tham số.
Chức năng hàm: kích hoạt I2C clock, cấu hình chân truyền dữ liệu SDA,
cấu hình chân giữ xung SLC, khởi tạo chế độ truyền dữ liệu ở mức
chuẩn100KHz hay ở chế độ 400KHz.


Hàm mở kết nối thiết lập giao tiếp I2C với thiết bị ngoại vi.
int I2C_IF_Open (unsigned long ulMode){}
Tham số:


ulMode:

Chế


độ

truyền

tín

hiệu

gồm

2

chế

độ

I2C_MASTER_MODE_STD cho 100 Kbps chế độ tiêu chuẩn,
I2C_MASTER_MODE_FST for 400 Kbps chế độ tốc độ.


Hàm ghi dữ liệu cần truyền tới thiết bị (Slave)
int I2C_IF_Write(unsigned char ucDevAddr, unsigned char *pucData,
unsigned char ucLen, unsigned char ucStop){}
Tham số:
ucDevAddr: là 7-bit địa chỉ I2C Slave.
*pucData:
là con trỏ đến dữ liệu được ghi.
ucLen:
là độ dài của dữ liệu được ghi.

ucStop:
là bit cuối cùng để xác định dừng truyền dữ liệu.



Hàm đọc dữ liệu từ thiết bị truyền (Master)
int I2C_IF_Read(unsigned char ucDevAddr, unsigned char *pucData,
unsigned char ucLen)
Tham số:
ucDevAddr: là 7-bit địa chỉ I2C Slave
*pucData:
là con trỏ đến dữ liệu cần được đọc
ucLen:
độ dài dữ liệu được đọc.


-

Hàm đóng kết nối I2C với thiết bị ngoại vi: int I2C_IF_Close().
Để hiển thị các trạng thái của thiết bị sử dụng lập trình trình API cho IO led
trạng thái và switch out.
void SetActuatorStatus(_u8 ucChanID, _u8 ucActualVal) {}
Tham số:
_u8 ucChanID: biến định danh các kênh touch cảm ứng điều khiển thiết bị.
_8 ucActualVal: là biến xác định giá trị của touch khi có thay đổi tương
ứng đó là giá trị mà thiết bị được điều khiển.
Chức năng hàm: Xét giá trị trạng thái cho touch đầu vào khi có tác động
điều khiển.
unsigned char GetActuatorStatus(_u8 ucChanID) {}
Tham số: _u8 ucChanID: là biến định danh các kênh touch cảm ứng điều

khiển thiết bị.
Chức năng: Lấy giá trị trạng thái của của touch điều khiển khi có tác động
điều khiển.
void SetLedStatus (_u8 ucLedStt, _u8 ucLedSttVal) {}


Tham số:
_u8 ucLedStt:
biến hiển thị led trạng thái.
_u8 ucLedSttVal: biến lưu trạng thái của led.
Chức năng hàm: xét trạng thái led cho từng kênh ( chân ) của touch cảm
ứng đầu vào khi có sự thay đổi.
unsigned char GetLedStatus (_u8 ucLedStt) {}
Tham số: _u8 ucLedStt: biến hiển thị led trạng thái.
Chức năng hàm: lấy giá trị trạng thái led từng kênh ( chân ) của touch cảm
ứng đầu vào khi có sự thay đổi trạng thái các kênh của touch.
3.3.2. Lập trình Socket điều khiển thiết bị qua wifi.
Để điều khiển thiết bị qua wifi trên CC3200 có các hàm lập trình API cho
UDP Socket.
 Hàm tạo Socket:_i16 sl_Socket(_i16 Domain, _i16 Type, _i16 Protocol);
 Hàm gán địa chỉ cho UDP Sever:
_i16 sl_Bind(_i16 sd, const SlSockAddr_t *addr, _i16 addrlen);
Tham số:
sd:
biến chứa Socket vừa được tạo.
*addr:
biến chứa địa chỉ của Socket.
addrlen: chiều dài của địa chỉ Socket.
 Hàm phản hồi UDP Server cho UDP Client.
_i16 sl_RecvFrom(_i16 sd, void *buf, _i16 Len, _i16 flags, SlSockAddr_t

-

*from, SlSocklen_t *fromlen);
Tham số:
sd:
biến chứa Socket cần thực thi.
*buf: bộ đệm kiểu con trỏ chứa gói tin.
Len:
chiều dài bộ đệm.
Flags: cờ chỉ định gói tin nhận, trong hàm này không sử dụng và mặc định
bằng NULL.
*from: con trỏ địa chỉ cần gửi phản hồi.
*fromlen: con trỏ chiều dài địa chỉ cần gửi phản hồi.
 Hàm gửi gói tin.
_i16 sl_SendTo(_i16 sd, const void *buf, _i16 Len, _i16 flags, const
SlSockAddr_t *to, SlSocklen_t tolen);
sd:
biến chứa Socket cần thực thi.
*buf: bộ đệm kiểu con trỏ chứa gói tin.
Len:
chiều dài bộ đệm.
Flags: cờ chỉ định gói tin nhận, trong hàm này không sử dụng và mặc định là
NULL.


*to:
con trỏ địa chỉ nhận gói tin (địa chỉ UDP Server)
*fromlen: con trỏ chiều dài địa chỉ nhận gói tin.
 Hàm đóng Socket: _i16 sl_Close(_i16 sd){}
-


Device Node sẽ nhận gói tin điều khiển thông nhờ lập trình hàm thực thi
UDP Server có lưu đồ giải thuật sau:

Hình 6: Lưu đồ giải thuật lập trình UDP
 Giải thích lưu đồ.

B1: Bắt đầu chương trình.
B2: Chờ Touch Sensor kết nối với Access Point.
B3: Kiểm tra kết nối. Nếu có kết nối chuyển qua bước B4, ngược lại tiếp
tục kết nối Touch Sensor với Access Point.
B4: Mở kết nối, cấu hình Socket UDP Server.


B5: Kiểm tra cấu hình. Nếu cấu hình thành công chuyển sang bước B6,
ngược lại cấu hình lại UDP Sever.
B6: Gán địa chỉ cho UDP Server.
B7: Lắng nghe gói tin từ UDP Client gửi tới.
B8: Nhận gói tin từ UDP Client gửi tới.
B9: Kiểm tra gói tin nhận thành công hay không. Nếu thành công chuyển
sang bước B10, ngược lại tiếp tục nhận gói tin.
B10: Xử lí gói tin.
+ Nếu là gói tin “**DRIVE” thì sẽ thực thi điều khiển thiết bị tương ứng.
+ Nếu gói tin là “**CONFG” thì sẽ thực thi cấu hình Touch Sensor.
+ Nếu gói tin là “**SCHED” thì sẽ thực thi lập lịch cho Touch Sensor.
 Hàm lập trình Task UDP server:
void UDPServerTask(void *pvParameters){}
Tham số:
*pvParameters là tham số kiểu dữ liệu con trỏ nhưng trong hàm này không
sử dụng.

Chức năng hàm: Tạo và cấu hình một socket cho UDP socket Server. Xử lí
gói tin điều khiển thiết bị từ UDP Client gửi tới.

-

Device Control sẽ gửi gói tin điều khiển tới Device Node nhờ lập trình hàm
thực thi UDP Client có lưu đồ giải thuật sau:


Hình 7: Lưu đồ giải thuật lập trinh UDP Client
Giải thích lưu đồ
B1: Bắt đầu chương trình.
B2: Kiểm tra cờ gửi gói tin. Nếu cờ được bật chuyển qua bước B3, ngược
lại tiếp tục chờ cờ gửi gói tin bật.
B3: Mở cấu hình Socket UDP Client.
B4: Kiểm tra UDP Client đã được mở và cấu hình. Nếu mở và cấu hình
UDP Client thành công thực hiện bước B5, ngược lại tiếp tục mở và cấu
hình lại Socket UDP Client.
B5: Kiểm tra cờ gửi và kênh gửi gói tin.
B6: Cờ gửi đã được bật, kênh gửi đúng thực thực hiện bước B7, ngược lại
tiếp tục kiểm tra lại.
B7: Tạo gói tin.
B8: Gửi gói tin.
B9: Kiểm tra gói tin được gửi thành công hay không. Nếu thành công thực
hiện bước B10, ngược lại xóa cờ gửi và đóng Socket.


B10: Đóng Socket.



Hàm

lập

trình

Task

UDP

Client:

void

UDPClientTask

(void

*pvParameters)
Tham số:
*pvParameters: là tham số kiểu con trỏ nhưng trong hàm này không sử
dụng.
Chức năng hàm: Tạo và cấu hình một socket cho UDP socket Client. Gửi
gói tin điều khiển cho UDP socket Sever chờ phản hồi từ UDP Sever.
-

Khi các gói tin được UDP Server nhận thành công các gói tin sẽ được phân
tích qua hàm hàm xử lí gói tin để biết gói tin gửi tới thuộc gói tin điều khiển
nào bởi hàm xử lí gói tin sau:
 Thông tin gói tin: gói tin gửi tới gồm 7bit header đầu tiên tiếp theo là 1bit

control word ( điều khiển thiết bị là bật – giá trị là 1 hoặc tắt – giá trị là 0)
2bit tiếp theo xác định nút cảm biến, thiết bị nào được điều khiển. 12bit tiếp
theo là địa chỉ IP của Touch cảm ứng xác định Touch cảm ứng nào được
điều khiển.
 Hàm int ProcessPacket (int iPacketLen, _u8 ucConnectMode) {}
Tham số:
iPacketLen: Độ dài gói tin.
_u8 ucConnectMode: chế độ kết nối.
Chức năng hàm: Lấy 7bit header của gói tin từ bộ đệm nhờ hàm strncpy()
Sau đó kiểm tra xem 7bit header có trùng với header mặc định “**DRIVE”,
“**CONFG”, “**SCHED” không bằng hàm strncmp(). Nếu 7bit header
trùng với header mặc định thì sẽ lấy 2bit tiếp theo để xác định kênh ( chân
cảm biến đầu vào ) nào của touch được điều khiển ( bật hoặc tắt ) tương ứng
với mỗi chân đó là 1 thiết bị ngược lại touch và thiết bị sẽ không được điều
khiển.

3.3.4. Lập trình với tập tin hệ thống.
-

Tìm hiểu lập trình API với tập tin hệ thống trên CC3200.
 Hàm mở gói tin.
_i32 sl_FsOpen(const _u8 *pFileName,
const _u32 AccessModeAndMaxSize, _u32 *pToken, _i32 *pFileHandle);


Tham số:
*pFileName: Tên tập tin (.txt)
AccessModeAndMaxSize: các chế độ mở tập tin
FS_MODE_OPEN_READ: chế độ mở và đọc nội dung tập tin.
FS_MODE_OPEN_WRITE: chế độ mở và ghi vào tập tin

FS_MODE_OPEN_CREATE: chế độ mở và tạo tập tin khi tập
tin chưa được tạo.
*pToken: khởi tạo dự trữ. Mặc định là NULL.
*pFileHandle:
Hàm ghi dữ liệu vào gói tin.
_i32 sl_FsWrite (const _i32 FileHdl, _u32 Offset, _u8* pData, _u32 Len);
Tham số:
FileHdl: trỏ đến tập tin (chỉ định từ hàm sl_FsOpen).
Offset: mặc định là NULL.
pData: con trỏ dữ liệu được truyền đến thiết bị lưu trữ.
Len: chiều dài dữ liệu được ghi.
 Hàm đọc tập tin.
_i32 sl_FsRead (const _i32 FileHdl, _u32 Offset , _u8* pData, _u32 Len);
Tham số:
FileHdl: trỏ đến tập tin (chỉ định từ hàm sl_FsOpen).
Offset: mặc định là NULL.
pData: con trỏ dữ liệu được truyền đến thiết bị lưu trữ.
Len:
chiều dài dữ liệu được đọc.
Device Node sẽ khôi phục lại trạng thái đã lưu trước đó bằng 2 hàm lập trình


với tập tin hệ thống chính là:


Hàm lưu lại các giá trị hiện tại của touch cảm biến điện dung sau mỗi lần có
thay đổi:
void SaveChanStts(void){}
Tham số: không có tham số.
Chức năng hàm: Mở hoặc tạo ra tập tin cấu hình để ghi dữ liệu mới nhờ hàm

sl_FsOpen() trong thư viện, ghi trạng thái thiết bị vào file nhờ hàm



sl_FsWrite(), đóng file nhờ hàm sl_FsClose().
Khôi phục lại trạng thái của thiết bị sau mỗi lần hoạt động lại.
void ResChannStts(void) {}
Tham số: không có tham số.


Chức năng hàm: Xét trạng thái mặc định cho thiết bị là tắt trong trường hợp
file chưa có trạng thái thiết bị trước đó. Mở file đã lưu trạng của thiết bị. Nếu
không có trạng thái thiết bị được lưu trong bộ nhớ thì đóng file lưu trữ, ngược
lại đọc và sử lí nội dung file. Khôi phục lại trạng thái thiết bị. Đóng file.
3.4. Kết quả đề tài đạt được.
3.4.1. Kết quả.
-

Hoàn thành đúng các mục tiêu đã đặt ra trong đề tài
Sản phẩm thực hiện được các chức năng:
 Cho phép người dùng điều khiển thiết bị bằng Touch cảm ứng như một công
tắc điều khiển cơ thông dụng.
 Cho phép người dùng sử dụng laptop, máy tính bảng, smart phone… điều
khiển thiết bị qua wifi.
 Sản phẩm hoạt động tốt các chức năng, lưu lại và khôi phục lại trạng thái

trước đó sau mỗi lần hoạt động lại.
- Sản phẩm có ứng dụng trong nhà thông minh.
- Kiểm thử.
 Điều khiển thiết bị bằng cảm biến điện dung.



Hình 8: Điều khiển thiết bị bằng tay qua cảm ứng điện dung


Điều khiển thiết bị qua wifi.


Hình 9: Điều khiển thiết bị qua Wifi
3.4.2. Hướng phát triển.
-

Bổ sung thêm các chức năng mới như: hẹn giờ bật tắt thiết bị, chức năng cài
đặt cấu hình Wifi…

Phần 4. Kết quả đạt được qua đợt thực tập.
4.1. Kiến thức lý thuyết được củng cố.
-

Kiến thức hệ điều hành, lập trình C.
Lập trình giao tiếp với các ngoại vi với board nhúng: I2C, UART,…
Lập trình socket với giao thức UDP.
Được tìm hiểu thêm về một chip wifi CC3200.

4.2. Kĩ năng thực hành học thêm.
-

Kỹ năng Debug code.
Lập trình với Touch sensor.
Kỹ năng làm việc nhóm.

Lập kế hoạch phân hoạch công việc.
Kỹ năng lập trình hướng hàm.
Kỹ năng phân tích và giải quyết vấn đề.
Kĩ năng viết báo cáo.


4.3. Kinh nghiệm thực tiễn tích lũy.
Trải qua gần 3 tháng thực tập tại công ty cổ phần VSMARTTEK đã giúp em học
hỏi được nhiều điều bổ ích không những giúp em củng cố lại kiến thức, làm
quen với môi trường doanh nghiệp mà giúp cho em tích lũy nhiều kinh nghiệm
-

thực tiễn cho việc đi làm sau này đó là:
Tuân thủ nội quy của công ty.
Phải tự tin vào bản thân.
Nỗ lực, chăm chỉ, chịu khó trong công việc.
Năng động trong các hoạt động của công ty.
Chủ động trong việc tiếp cận kiến thức mới cũng như học hỏi các anh, chị, bạn
đồng nghiệp.



×