Nếu bạn hỏi đội ngũ bên mình lộ trình học lập trình nhúng IoT nên bắt đầu từ đâu, câu trả lời của chúng tôi vẫn là một chuỗi bước khá quen thuộc. Bạn cần nắm điện cơ bản, học ngôn ngữ C, rồi mới chạm vào vi điều khiển. Nghe thì gọn gàng. Nhưng khi tự tay làm, hầu như ai cũng vấp ở vài chỗ. Bài này chúng tôi viết để bạn đi qua những chỗ đó nhanh hơn. Đồng thời, bạn cũng sẽ hình dung được đường đi trước khi bỏ tiền mua linh kiện đầu tiên.
Nói đơn giản, lập trình nhúng IoT là viết phần mềm cho những thiết bị nhỏ, ít tài nguyên như vi điều khiển và cảm biến. Sau đó, bạn nối chúng lên mạng để gửi và nhận dữ liệu. Ví dụ quen thuộc là một cảm biến nhiệt độ trong nhà. Nó đọc số liệu mỗi vài giây rồi đẩy lên điện thoại. Theo những gì chúng tôi quan sát khi kèm các bạn mới vào nghề, người học đều đặn thường hoàn thành một thiết bị hoàn chỉnh trong khoảng ba đến bốn tháng. Đây không phải lời hứa, chỉ là kinh nghiệm thực tế.
Nền tảng cần có trước khi chạm vào phần cứng
Đừng vội mua bo mạch ngay. Bạn nên hiểu mạch điện đơn giản trước. Điện áp là mức độ đẩy của dòng điện. Dòng điện là lượng điện đi qua mạch. Điện trở là thứ làm giảm dòng đó xuống. Ba khái niệm này nghe khô khan. Nhưng khi nắm chắc, bạn sẽ hiểu vì sao một con LED cháy ngay nếu nối thẳng vào nguồn mà thiếu điện trở hạn dòng.
Ngôn ngữ C là lựa chọn số một cho lập trình nhúng. Nó nằm gần phần cứng hơn hầu hết các ngôn ngữ khác. Có bạn trong nhóm từng học Python trước, rồi chuyển sang C. Họ thường kể lại cảm giác lạ lẫm đầu tiên. Theo quan sát của chúng tôi, phần khó nhất không nằm ở cú pháp. Nó nằm ở bộ nhớ và con trỏ. Vì vậy, hãy dành thời gian vẽ ra biến được lưu ở đâu trong bộ nhớ. Đừng chỉ gõ sao cho chương trình chạy là xong.
Bạn cũng nên làm quen với dòng lệnh và Linux cơ bản. Phần lớn công cụ biên dịch và nạp chương trình chạy trên nền này. Biết vài lệnh cơ bản sẽ tiết kiệm khá nhiều thời gian chờ. Nó cũng giúp bạn bớt hoang mang khi công cụ báo lỗi bằng một dòng chữ lạ.
Chọn bo mạch nào để bắt đầu
Arduino phù hợp để học khái niệm. Thư viện của nó phong phú, và có rất nhiều hướng dẫn dễ làm theo. Tuy vậy, khi dự án cần Wi-Fi hoặc Bluetooth, ESP32 hợp lý hơn hẳn. Giá tham khảo tại các cửa hàng linh kiện ở Việt Nam dao động quanh 150.000 đến 300.000 đồng với Arduino Uno. Với ESP32, con số khoảng 100.000 đến 200.000 đồng. Giá thay đổi theo thời điểm và nguồn hàng, nên bạn nên so sánh vài nơi trước khi mua.
Về cảm biến, có ba món đáng sắm cho giai đoạn đầu. Thứ nhất là DHT11 hoặc DHT22 để đo nhiệt độ và độ ẩm. DHT22 chính xác hơn nhưng giá cao hơn đôi chút. Thứ hai là một cảm biến ánh sáng đơn giản. Thứ ba là cảm biến khoảng cách siêu âm. Với người mới, món nào cũng đủ để luyện tập.
Giai đoạn đầu: điều khiển các chân ngoại vi
Ở giai đoạn này, bạn sẽ làm quen với việc đọc và ghi các chân GPIO. Đó là những chân vào ra số của vi điều khiển. Tiếp theo là PWM, kỹ thuật bật tắt rất nhanh để điều chỉnh độ sáng đèn hay tốc độ quạt. Bạn cũng cần học cách đọc tín hiệu analog từ cảm biến. Giá trị từ cảm biến thường không chỉ có bật và tắt.
Đừng bỏ qua ngắt và timer. Nếu chương trình cứ nằm chờ trong vòng lặp, nó sẽ không làm được việc gì khác cùng lúc. Ngắt cho phép vi điều khiển phản ứng ngay khi có sự kiện. Timer giúp đo thời gian chính xác. Một lỗi chúng tôi gặp rất thường xuyên là người mới dùng delay() khắp nơi. Hệ thống vì thế đứng im mỗi lần phải chờ. Khi thấy mạch đơ như vậy, hãy thử thay delay bằng kiểm tra thời gian dựa trên timer.
Một bài tập mẫu rất hợp để thử: cho đèn LED nhấp nháy nhanh hơn khi nhiệt độ đọc từ cảm biến tăng lên. Bài này buộc bạn kết hợp đọc analog, tính toán và điều khiển chân ra trong cùng một chương trình. Đây đúng là kiểu tình huống bạn sẽ gặp khi làm sản phẩm thật.
Các cách để các thiết bị nói chuyện với nhau
Khi có nhiều linh kiện trên cùng một mạch, chúng cần một ngôn ngữ chung để trao đổi dữ liệu. UART thường dùng để nối hai thiết bị đơn giản. I2C tiết kiệm chân hơn, vì nhiều cảm biến có thể dùng chung hai dây. SPI nhanh hơn và hợp với màn hình hay thẻ nhớ. Chọn đúng giao thức ngay từ đầu giúp bạn đỡ đau đầu khi ghép mạch về sau.
Một kỹ năng nhiều người bỏ qua là đọc datasheet. Đây là tài liệu của nhà sản xuất. Nó ghi rõ địa chỉ thanh ghi và thời gian chờ cần thiết cho từng thao tác. Copy đoạn mã trên mạng có thể chạy được hôm nay. Nhưng khi gặp linh kiện khác, bạn sẽ bế tắc ngay. Chúng tôi khuyên bạn đọc ít nhất phần sơ đồ chân và bảng thanh ghi của mỗi linh kiện trước khi viết dòng code đầu tiên. Lúc đầu sẽ chậm, nhưng về lâu dài tiết kiệm rất nhiều thời gian.
Dự án nhỏ để luyện tập là đọc cảm biến qua I2C rồi hiển thị kết quả lên màn hình OLED. Qua bài này, bạn sẽ thấy rõ sự khác biệt giữa chạy được và hiểu vì sao chạy được.
Đưa dữ liệu lên mạng và đám mây
MQTT là giao thức nhẹ, gửi tin nhắn theo mô hình publish và subscribe. Nó rất hợp với thiết bị có băng thông thấp. HTTP quen thuộc hơn, nhưng nặng hơn khi phải gửi liên tục. Với đa số bài toán IoT cơ bản, MQTT là lựa chọn đi được xa hơn về sau, nên đáng để bạn học sớm.
Trên ESP32, bạn có thể dùng Wi-Fi để gửi dữ liệu cảm biến lên các nền tảng như Thingsboard hoặc Adafruit IO. Từ đó xem biểu đồ trực tiếp. Tình huống hay gặp nhất là mạng chập chờn. Chương trình cần biết tự kết nối lại thay vì treo luôn. Đây là chỗ nhiều dự án đầu tay bị hỏng. Nhưng cũng chính là chỗ bạn học được nhiều nhất nếu kiên nhẫn thử nghiệm.
Nghề này có gì tốt, có gì khó
Ưu điểm lớn nhất là nhu cầu khá ổn định ở các lĩnh vực sản xuất, ô tô, nhà thông minh và nông nghiệp công nghệ cao. Người vừa hiểu phần cứng vừa viết được phần mềm thường được nhiều công ty tìm kiếm, vì loại người này không nhiều.
Nhược điểm là học chậm hơn lập trình web, vì bạn phải hiểu cả điện lẫn code. Gỡ lỗi cũng khó hơn nhiều. Một lỗi có thể nằm ở sợi dây cắm lỏng, chứ không nằm ở dòng lệnh nào. Lương người mới thường thấp hơn backend. Tuy vậy, mức này sẽ tăng nhanh nếu bạn có dự án thực tế để trình bày khi phỏng vấn.
Dự án đầu tiên nên làm
Đội ngũ chúng tôi thường gợi ý hệ thống giám sát nhiệt độ, độ ẩm trong nhà, có cảnh báo gửi về điện thoại khi vượt ngưỡng. Dự án này đủ cảm biến, đủ mạng và đủ giao diện. Bạn sẽ trải nghiệm trọn một vòng đời sản phẩm, từ thu thập dữ liệu đến người dùng cuối.
Một lựa chọn khác là mô hình đèn hoặc quạt điều khiển từ xa qua ứng dụng. Sau khi làm xong, hãy vẽ lại sơ đồ mạch, đưa mã nguồn lên GitHub và quay một video demo ngắn. Nhà tuyển dụng thường xem những thứ này trước khi xem bằng cấp. Nếu bạn muốn nắm bức tranh chung về nền tảng lập trình trước khi đi sâu vào phần cứng, hãy đọc thêm lộ trình học lập trình cho người mới.
Những sai lầm người mới hay mắc
Sai lầm đầu tiên là mua quá nhiều linh kiện khi kiến thức còn mỏng. Tiền bỏ ra không ít, nhưng không có thời gian dùng hết. Cuối cùng linh kiện nằm im trong hộp.
Sai lầm thứ hai là bỏ qua datasheet và chỉ copy mã. Khi mạch không chạy, bạn không biết bắt đầu kiểm tra từ đâu. Thường thì loay hoay cả buổi tối mà vẫn chưa ra.
Sai lầm thứ ba là đổ lỗi cho phần mềm, trong khi mạch mới là nguyên nhân. Một chiếc đồng hồ vạn năng để đo điện áp tại các chân thường tiết kiệm cho bạn nhiều giờ dò lỗi vô ích. Đây là món đồ chúng tôi khuyên mua sớm nhất, thậm chí trước cả cảm biến thứ hai.
Lịch học và nguồn tài liệu nên theo
Chúng tôi khuyên dành một đến hai giờ mỗi ngày. Mỗi tuần học một chủ đề, mỗi tháng làm một dự án nhỏ. Học đều đặn luôn hiệu quả hơn học dồn cuối tuần, vì kiến thức về điện và lập trình cần thời gian để ngấm.
Nên ưu tiên tài liệu chính thức của Espressif và Arduino, vì chúng luôn cập nhật theo phần cứng mới nhất. Khi đã vững nền tảng, bạn có thể chọn thêm khóa học có bài tập thực hành. Nếu muốn chuẩn bị kỹ cho phần lập trình vi điều khiển, bạn có thể đọc thêm giới thiệu ngôn ngữ C và cài đặt môi trường lập trình.
Tham gia các cộng đồng kỹ sư điện tử cũng giúp bạn hỏi nhanh khi kẹt. Nhiều khi chỉ một câu gợi ý là gỡ được cả buổi tối vướng mắc. Bạn cũng học được cách người khác xử lý những lỗi tương tự.
Câu hỏi thường gặp
Người không biết điện tử có học được lập trình nhúng IoT không?
Được. Bạn chỉ cần học các khái niệm điện cơ bản song song với lập trình. Nhiều người trong nghề hiện nay bắt đầu từ con số không về điện, và vẫn đi làm được sau vài dự án.
Nên học C hay Python cho IoT?
Học C nếu bạn muốn đi sâu vào vi điều khiển. Python hợp để xử lý dữ liệu hoặc làm máy chủ phía sau. Thực tế, nhiều người học cả hai và dùng chúng bổ trợ cho nhau.
Mất bao lâu để làm được thiết bị IoT hoàn chỉnh?
Với lịch học đều đặn, khoảng ba đến bốn tháng là bạn có thể làm một thiết bị đọc cảm biến và gửi dữ liệu lên mạng.
Cần máy tính cấu hình cao không?
Không cần. Lập trình vi điều khiển chủ yếu chạy các công cụ nhẹ, một máy tính thông thường là đủ dùng.
Học nhúng IoT có cần bằng đại học không?
Không bắt buộc, nhưng bạn cần chứng minh năng lực qua dự án thực tế. Một danh mục sản phẩm rõ ràng thường có sức nặng hơn tấm bằng khi xin việc.
Nếu bạn đang cân nhắc bắt đầu, hãy mua một bo ESP32 và một cảm biến nhiệt độ, rồi làm ngay đèn báo nhiệt độ trong tuần này. Đó là bước đầu tiên đáng làm nhất, và cũng là cách nhanh nhất để biết mình có hợp với nghề này hay không. Khi cần thanh toán mua linh kiện trực tuyến, bạn có thể thử cổng thanh toán miễn phí để tiết kiệm phí giao dịch.