Sn binary option th no l uy tn

Chỉ báo đảo chiều binary option

HƯỚNG DẪN CƠ BẢN VỀ HÀM STRING (CHUỖI) TRONG VBA,Khóa học Trọn bộ SQL cơ bản qua 500 câu truy vấn dành cho người mới bắt đầu

WebInternet Of Things (IoT) – Internet vạn vật dường như đang đứng trước một bước ngoặt để đi đến giai đoạn tiếp theo cho một thế giới hiện đại, văn minh. Đó là viễn cảnh mà mọi vật đều có thể kết nối với nhau thông qua Internet không dây. Các doanh nghiệp đang có xu hướng ứng dụng sản phẩm công nghệ IoT WebBảng xếp hạng sàn forex uy tín, tốt nhất thế giới cho TraderViet. Top sàn giao dịch forex được cấp giấy phép bởi các cơ quan quản lý tài chính uy tín WebĐáp án tham khảo IELTS - Cambridge Reading- Thầy Ngọc Bách WebGiáo trình Tin học đại cương WebFibonacci là một chỉ báo trong phân tích kỹ thuật có nguồn gốc từ một lý thuyết toán học của Leonardo Fibonacci sống ở thế ký Theo lý thuyết này, Fibonacci là một chuỗi các chữ số, bắt đầu từ là 0 và 1, các số phía sau là tổng 2 số đứng liền trước ... read more

Đèn LED viết tắt Light Emitting Diodes - là bóng bán dẫn có thể phát sáng với màu sắc khác nhau tùy thuộc vào chất liệu bán dẫn. Để điều khiển được bóng LED cần cung cấp mức điện áp chênh lệch giữa cực âm và cực dương của bóng LED cao hơn mức điện áp Vf datasheet , thường là 3. Với mã nguồn bên dưới, sau khi kiểm tra chương trình, bạn cần chắc chắn đã Chọn Board ESP WiFi Uno trong Arduino IDE và Nạp chương trình xuống board dùng Arduino IDE.

Tên Pin trong Arduino Pin number giống với thứ tự chân của ESP pinMode , digitalRead , và digitalWrite đều sử dụng Pin Number như nhau, ví dụ như đọc GPIO2, gọi hàm digitalRead 2.

Khi khởi động, tất cả các chân sẽ được cấu hình là INPUT. Mỗi chân có thể phục vụ cho một tính năng nào đó, ví dụ Serial , I2C , SPI. Và tính năng đó sẽ được cấu hình đúng khi sử dụng thư viện. GPIO6 và GPIO11 không được thể hiện bởi vì nó được sử dụng cho việc kết nối với Flash. Việc sử dụng 2 chân này có thể gây lỗi chương trình. Ngắt GPIO hỗ trợ thông qua các hàm attachInterrupt , detachInterrupt Ngắt GPIO có thể gán cho bất kỳ GPIO nào, ngoại trừ GPIO16 và đều hỗ trợ các ngắt tiêu chuẩn của Arduino như: CHANGE , RISING , FALLING.

Nút nhấn sẽ giúp việc ESP khởi động một hành động nào đó khi cần thiết. Trong nhiều ứng dụng chúng ta hầu như đều cần những kích hoạt từ bên ngoài. Xuyên suốt cuốn sách này, sẽ dùng nút nhấn để kích hoạt chạy các ứng dụng mẫu cũng như đèn LED để thông báo các trạng thái. Đây là ví dụ đơn giản, trong thực tế việc xử lý nút nhấn khá phiền phức.

Thường thì chỉ cần đảm bảo mức Logic của chân đo được đã được giữ ổn định trong khoảng mili giây là được xem đã ổn định. Ngoài cách dùng ngắt để xác định nút nhấn có được nhấn hay không - cách này sẽ tiết kiệm tài nguyên tính toán của CPU, nó chỉ được gọi khi có sự kiện xảy ra, thì còn một cách nữa là hỏi vòng: Cách này đỏi hỏi CPU liên tục kiểm tra xem mức Logic của nút nhấn.

Đồng thời việc đáp ứng cũng không nhanh bằng sử dụng ngắt. Ngắt Ngắt là một khái niệm liên quan nhiều đến phần cứng, một sự kiện nào đó xảy ra, bắt buộc CPU phải dừng các tác vụ bình thường khác đang thực thi để thực hiện tác vụ Ngắt.

Ví dụ, cấu hình ngắt khi có thay đổi mức logic từ 1 về 0 cạnh xuống của GPIO, thì khi mức logic thay đổi trên GPIO đó, CPU sẽ ngay lập tức dừng và lưu các trạng thái tại chương trình chính và nhảy vào hàm ngắt để thực thi các lệnh trong đó. Ở trạng thái Input, thì các GPIO được cấu hình trở kháng cao Hi-Z , hay còn gọi là trạng thái cách ly, không cho dòng điện đi qua, nhưng vẫn cảm nhận được điện áp. Ở trạng thái Hi-Z, nếu không xác định mức logic trước cho GPIO thì GPIO này bị thả trôi, nghĩa là rất dễ ảnh hưởng bởi môi trường, khi đọc về sẽ không đoán định được mức Logic.

Pull-up là nối 1 điện trở với GPIO này lên mức logic 1, xác định trước 1 điện áp cho nó để đảm bảo không không có tác động điện nào thì nó là mức logic 1. Tương tự, pull-down xác định trước mức logic 0 cho GPIO. OLED Organic Light Emitting Diode là loại màn hình hiển thị bao gồm một lớp vật liệu hữu cơ với chủ yếu là cacbon nằm giữa hai điện cực anot và catot sẽ tự động phát sáng mỗi khi có dòng điện chạy qua.

OLED sử dụng đi-ốt phát quang hữu cơ, chính vì thế nó không cần tới đèn nền chiếu sáng, do đó có lợi thế về kích thước cũng như tiết kiệm điện hơn so với các loại LCD. Và độ sáng tương đối tốt ở môi trường sáng tự nhiên. Là màn hình loại nhỏ, kích thước tầm 0. Tấm nền được điều khiển bằng chip driver SSD I2C Inter-Integrated Circuit là một loại bus nối tiếp được phát triển bởi hãng Philips nhằm truyền nhận dữ liệu giữa các IC.

I2C sử dụng 2 đường truyền tín hiệu, 1 đường xung nhịp đồng hồ SCL do Master phát đi và 1 đường truyền dữ liệu theo 2 hướng SDA. Mạch vật lý I2C là mạch cực thu hở, do đó để mạng I2C có thể hoạt động được, cần tối thiểu 2 cặp điện trở pull-up như trên hình.

Thông thường 4k7, hoặc 1k2. Tùy thuộc vào tốc độ truyền và khoảng cách truyền. Bước 1: Đấu nối nối chân GPIO4 của ESP với chân SDA của OLED, chân GPIO5 với SCL. Cấp nguồn 3v3 vào VCC và đấu GND cho OLED. Tuy nhiên với board ESP IoT Uno thì phần đấu nối đã ra sẵn header, bạn chỉ cần cắm OLED vào như hình. Bước 2: Cài đặt thư viện ESP and ESP32 OLED driver for SSD display , xem thêm Cài đặt thư viện Arduino.

Bước 3: Lập trình Chúng ta sẽ thực hiện hiển thị giả lập đồng hô trên màn hình OLED. Kết nối WiFi chính điểm mạnh nhất của chip ESP, nó có thể kết nối đến các Router sẵn có trong gia đình, các Access Point với các tiêu chuẩn kết nối thông dụng hiện nay ở tần số 2.

Ngoài ra, ESP còn hỗ trợ chế độ AP Access Point , tức là nó có thể khởi động một hoặc nhiều Access Point và cho phép các client khác có thể kết nối vào, hoặc chạy đồng thời cả chế độ STA và AP. Trong đa phần các ứng dụng thì chế độ STA được sử dụng rất nhiều, nó giúp thiết bị kết nối đến mạng WiFi cục bộ, có internet để kết nối đến Server và gởi dữ liệu. Một số trường hợp khác thì chế độ AP được sử dụng để trao đổi dữ liệu với ESP và máy tính hoặc thiết bị có hỗ trợ trình duyệt.

Ví dụ như điều khiển đóng tắt đèn thông qua Web Server chạy trên ESP WiFi Access Point là một thiết bị xử lý kết nối trung tâm và phân phối các luồng dữ liệu. Như là việc xử lý các gói tin IP để định địa chỉ mạng LAN, định tuyến các gói tin từ Internet về các máy trạm Station.

Thiết bị kết nối đến Access Point được gọi là Station, các máy tính Laptop, máy tính có card WiFi khi kết nối vào Access Point thì đều được gọi là Station. Các Station khi muốn kết nối vào Access Point thì cần xác định thông qua BSSID , thông thường chúng ta hay gọi là SSID - hay mạng WiFi. Bạn có thể dễ dàng xem danh sánh SSID xung quanh mình khi scan wifi trên máy tính để kết nối mạng Internet.

Để kết nối được vào mạng Internet, thì đầu tiên ESP phải kết nối vào mạng WiFi nội bộ, và mạng WiFi nội bộ phải có kết nối WAN Internet. Đa phần các Modem hiện nay đều tích hợp luôn cả WiFi Access Point, do đó khá dễ dàng trong việc triển khai các ứng dụng IoT. Khi muốn kết nối vào mạng WiFi cục bộ thì ESP cần phải hoạt động ở chế độ Station STA , đồng thời nó phải được cung cấp tên SSID và mật khẩu mạng WiFi. Mỗi Access Point đều yêu cầu một phương thức mã hóa để Station sử dụng nhằm tạo kết nối - ví dụ các phương thức WEP , WPA2 , tuy nhiên chúng ta có lẽ không cần quan tâm nhiều, vì ESP sẽ tự động thực hiện các thao tác lựa chọn phương thức mã hóa.

Khi kết nối thành công vào mạng WiFi thì ESP sẽ khởi động DHCP Client mặc định để xin cấp phát địa chỉ IP trước khi bắt đầu các kết nối IP. Do đó, nếu như vì lý do gì đó, mà Access Point của bạn không có DHCP Server để cấp phát IP thì bạn phải cấu hình IP tĩnh cho ESP Với đoạn code này, nếu bạn cung cấp đúng SSID và PASSWORD , đồng thời Access Point hoạt động thì thiết bị sẽ kết nối và in ra Serial Terminal địa chỉ IP của ESP trong mạng LAN.

Tuy nhiên, đôi lúc ứng dụng bạn cần nồi đồng cối đá , thì có mạng WiFi để backup là bình thường, class WiFiMulti sẽ giúp bạn điều đó. Cùng với một hàm monitor đơn giản để báo cho các chức năng khác biết khi mạng đã được thiết lập. HTTP - Hypertext Transfer Protocol giao thức truyền dẫn siêu văn bản , là giao thức để truyền dữ liệu giữa các máy tính qua www World Wide Web , với dữ liệu có thể là dạng text, file, ảnh, hoặc video.

Trình duyệt Web chính là Client, và một máy chủ chứa Web Site là Server. Client sẽ kết nối tới Server, gởi dữ liệu đến server bao gồm các thông tin header. Server nhận được thông tin và căn cứ trên đó gởi phản hồi lại cho Client. Đồng thời đóng kết nối. Một ví dụ điển hình là khi bạn gõ địa chỉ vào thanh địa chỉ của trình duyệt và nhấn Enter , thì ngay lập tức Web Client sẽ thực hiện việc gởi yêu cầu tới Web Server có địa chỉ mà bạn vừa gõ. Web Server sẽ trả lời bằng nội dung Web Site mà bạn cần xem.

Trong giao thức HTTP, việc thiết lập kết nối chỉ có thể xuất phát từ phía client lúc này có thể gọi là HTTP Client. Khi client gửi yêu cầu, cùng với URL và payload dữ liệu muốn lấy tới server.

Server HTTP Server lắng nghe mọi yêu cầu từ phía client và trả lời các yêu cầu ấy. Khi trả lời xong kết nối được chấm dứt. Khi nhắc tới HTTP thì Hyperlink, hay URL Uniform Resource Locator là những khái niệm được thấy hàng ngày. URL được dùng để định dạng địa chỉ Website, chứa các thông tin yêu cầu từ client và server dựa vào đó xử lý, cấu trúc của nó như hình:. Với đường dẫn như trên, khi bạn gõ vào trình duyệt, thì trình duyệt sẽ thực hiện kết nối và gởi dữ liệu như sau.

GET là phương thức yêu cầu dữ liệu đơn giản và thường sử dụng nhất của HTTP. Phương thức GET yêu cầu server chỉ trả về dữ liệu bằng việc cung cấp các thông tin truy vấn trên URL, thông thường Server căn cứ vào thông tin truy vấn đó trả về dữ liệu mà không thay đổi nó. path và query trong URL chứa thông tin truy vấn. POST tương tự như GET , nhưng POST có thể gởi dữ liệu về Server.

PUT là phương thức yêu cầu tạo mới một dữ liệu, giống POST nhưng đánh dấu cho Server biết, nếu dữ liệu không tồn tại trong cơ sở dữ liệu thì tạo mới, hoặc sửa đổi nó. DELETE Tương tự như GET , nhưng báo cho Server biết về việc xóa dữ liệu thông qua URL. Các phương thức thông thường chỉ dùng GET và POST , các phương thức còn lại thường sử dụng trong API server RESTful. Một số điểm khác biệt giữ POST và GET. GET có thể bị cache lưu trữ ở trình duyệt và sử dụng lại sau đó , nội dung request có thể lưu trữ ở lịch sử trình duyệt, có thể được đánh dấu bookmark.

POST không bị catch, không tồn tại dữ liệu gởi trong lịch sử trình duyệt, không thể đánh dấu bookmark. Theo sau đó là các cặp header chứa thông tin Server muốn trao đổi với Client, mà nếu là trình duyệt thì nó bị ẩn đi người dùng bình thường không thể thấy.

Transfer-Encoding: chunked chiều dài dữ liệu không được biết trước và gởi cho tới khi server đóng kết nối. Bản chất của mã trạng thái này, chỉ để thông báo với client rằng request đã được chấp nhận. Các mã hay gặp:. Nếu trong request POST, phần thân request lớn sẽ bị server từ chối và để giải quyết điều này thì client phải gửi Expect: continue theo sau phần header ban đầu. Với một số mã thường thấy:.

Có thể thấy mã trạng thái này trong các phương thức GET , HEAD , POST , TRACE. Được sử dụng để xác nhận sự thành công của một request PUT hoặc POST. Mã trạng thái thường gặp trong nhóm:. Được sử dụng khi server cho rằng phía Client đang xảy ra lỗi, với một request, hoặc tài nguyên không hợp lệ, hoặc một request không đúng. Các mã thông dụng:. Client có thể gửi lại request với header đã được xác thực.

Trường hợp đã đính kèm header xác thực nhưng vẫn nhận được thông báo này tức là header xác thực chưa hợp lệ. Xung đột xảy ra chủ yếu trong các request PUT trong quá trình hợp tác chỉnh sửa tài nguyên. Một số mã thường gặp:. JSON JavaScript Object Notation là 1 định dạng trao đổi dữ liệu để giúp việc đọc và viết dữ liệu trở nên dễ dàng hơn, máy tính cũng sẽ dễ phân tích và tạo ra JSON. Chúng là cơ sở dựa trên tập hợp của ngôn ngữ lập trình JavaScript. Những đặc tính đó đã tạo nên JSON 1 ngôn ngữ hoán vị dữ liệu lý tưởng.

Là tập hợp của các cặp tên và giá trị name-value. Trong những ngôn ngữ khác nhau, đây có thể là 1 object, record, struct, dictionary, hash table, keyed list hay associative array. Là 1 tập hợp các giá trị đã được sắp xếp. Trong hầu hết các ngôn ngữ, dữ liệu này được xem như array, véc tơ, list hay sequence. Đây là 1 cấu trúc dữ liệu phổ dụng. Hầu như tất cả các ngôn ngữ lập trình hiện đại đều hổ trợ.

Chúng tạo nên ý nghĩa của 1 định dạng hoán vị dữ liệu với các ngôn ngữ lập trình cũng đã được cơ sở hoá trên cấu trúc này. Ví dụ: "name":"John". Chúng ta có rất nhiều nguồn lấy tỉ giá, một trong số đó là www. Khi dùng HTTPS, chúng ta cần cung cấp SHA1 Fingerpint để Client có thể xác thực server.

Bạn có thể dùng trình duyệt để truy cập trước để lấy. Nếu là Chrome , sau khi truy cập vào địa chỉ min-api. Bạn sẽ thấy hình như bên dưới, và copy nó. Đây là đoạn Code lấy giá Bitcoin, cứ mỗi 5 giây, ESP sẽ kết nối đến Cryptocompare server để lấy thông tin và hiển thị lên OLED.

ESP có khả năng cho phép các thiết bị khác Station - STA truy cập vào và hoạt động như là 1 Access Point, có thể tự thiết lập 1 mạng WiFi nội bộ, với khả năng khởi động DHCP Client và cung cấp được IP cho các Client kết nối tới.

Do giới hạn về RAM, nên số lượng tối đa các STA có thể kết nối đến một ESP hiện tại là 5. Một mạng WiFi đơn giản nhất chỉ cần cung cấp tên SSID và không mật khẩu WiFi.

softAP ssid. Phức tạp hơn, bạn cung cấp mật khẩu cho mạng WiFi WiFi. softAP ssid, password , hoặc chi tiết WiFi. softAP ssid, password, channel, hidden khi cung cấp chính xác kênh truyền Nhớ rằng ssid sử dụng chuỗi ký tự không quá 63, và mật khẩu có thể không cần với tối thiểu 8 ký tự cho mạng WPA2-PSK. Với đoạn code này, bạn có thể tạo ra một mạng WiFi cục bộ có SSID là AP-XXXXXX và có thể dùng máy tính để kết nối trực tiếp vào với password là password.

Web Server là một máy chủ Web mà khi có bất kỳ một Web Client nào chẳng hạn Web Browser truy cập vào, thì nó sẽ căn cứ trên các thông tin yêu cầu truy cập để xử lý, và phản hồi lại nội dung. Đa phần các nội dung Web Server phục vụ là HTML, Javascript, CSS, JSON và bao gồm cả các dữ liệu Binary. Mặc định các Web Server phục vụ trên Port 80, và cho dịch vụ Web có bảo mật HTTPS. HTML, Javascript và CSS là ba ngôn ngữ để xây dựng và phát triển Web. Những hiểu biết cơ bản về chúng sẽ tạo điều kiện thuận lợi cho các quá trình tiếp theo sau được dễ dàng hơn.

Viết đầy đủ là Hyper Text Markup Language - ngôn ngữ đánh dấu siêu văn bản dùng để cấu trúc nội dung của một trang Web, ví dụ như: chỉ định các đoạn văn bản, tiêu đề, bảng dữ liệu, hoặc nhúng hình ảnh hoặc video vào Web. Mỗi trang Web chứa một loạt các liên kết đến các trang khác được gọi là hyperlinks siêu liên kết. Mỗi trang được tạo ra từ nhiều tag thẻ khác nhau, với cấu trúc một tag như sau.

Javascript là một ngôn ngữ được thiết kế chủ yếu để thêm tương tác vào các trang Web, và tạo ra các ứng dụng Web. Các chương trình Javascript có thể được nhúng trực tiếp vào HTML của Web.

CSS là từ viết tắt của Cascading Style Sheets , là một ngôn ngữ được thiết kế để xử lý giao diện Web, giúp các trang Web được đẹp hơn. CSS có thể kiểm soát được màu sắc của văn bản, phong chữ, kích cỡ chữ, khoảng cách giữa các đoạn văn, hình nền hoặc màu nền, và nhiều hiệu ứng khác.

ESP hoàn toàn có thể thực hiện vai trò Web Server để phục vụ cho một vài kết nối đến, tận dụng giao diện Web để điều khiển, cấu hình cho nó. Với ứng dụng này, ESP sẽ khởi tạo 1 Web Server, khi có bất kỳ client nào kết nối tới Web Browser thì ESP sẽ gởi về 1 trang HTML với các thông tin để Client có thể điều khiển chớp tắt đèn LED của board.

Thông thường, muốn hai hay nhiều ESP có thể liên lạc, trao đổi dữ liệu với nhau sẽ cần đến một router hay access-point, các module ESP này sẽ kết nối vào Access Point rồi sau đó giao tiếp với nhau. Có một số ứng dụng đơn giản để kết nối 2 ESP với nhau mà không cần Access Point, chúng ta có thể khởi tạo 1 board hoạt động như là WiFi Access Point, đồng thời khởi tạo 1 TCP Server. Board khác hoạt động như 1 WiFi client thông thường, kết nối vào mạng WiFi đã được tạo, và khởi động 1 TCP Client kết nối vào TCP Server kia.

Không cần bất kỳ một Router, hay Access Point nào, thực hiện việc kết nối giao tiếp giữa 2 ESP thông qua mạng WiFi, 2 Board này sẽ truyền dữ liệu với nhau mỗi giây, và hiển thị lên Serial Terminal. Sau mỗi giây, Board ESP này sẽ gởi dữ liệu vào Board kia, board nhận được dữ liệu sẽ in ra cổng Serial và gởi ngược lại.

Ngoài các ví dụ thực tiễn sử dụng ESP như HTTP Client ở hướng dẫn trên, bạn có thể sử dụng HTTPClient để kết nối đến các Server tự tạo, gởi dữ liệu cảm biến đến Server, cũng như lấy dữ liệu từ Server để thực thi các tác vụ.

Chế độ WiFi Access Point và Web Server chạy trên ESP thường sử dụng để cấu hình các thông số cho sản phẩm, sử dụng giao diện Web có ở bất kỳ máy tính nào để cung cấp các thông số phức tạp cho ứng dụng một cách dễ dàng. Trong bài này chúng ta sẽ xây dựng ứng dụng dùng cảm biến DHT11 để thu thập nhiệt độ, độ ẩm của môi trường.

Thông tin về nhiệt độ và độ ẩm sẽ được hiển thị trên máy tính và hiển thị trên trình duyệt web bằng cách truy cập vào 1 địa chỉ URL được chỉ định. Một số kiến thức cần thiết :. Nhiệt độ là đại lượng thể hiện tính chất vật lý nóng, lạnh của vật chất. Nhiệt độ được đo bằng các đơn vị khác nhau và có thể biến đổi bằng các công thức.

Trong hệ đo lường quốc tế, nhiệt độ được đo bằng đơn vị Kelvin, ký hiệu là K. Trong đời sống ở Việt Nam và nhiều nước, nó được đo bằng độ C. Định nghĩa khác của độ ẩm tương đối là tỷ số giữa khối lượng nước trên một thể tích hiện tại so với khối lượng nước trên cùng thể tích đó khi hơi nước bão hòa.

DHT11 là một cảm biến có khả năng đo nhiệt độ và độ ẩm không khí với độ chính xác vừa phải, giá cả phải chăng. Có thể lấy dữ liệu đo được của cảm biến bằng giao thức OneWire. Trong thực tế, khi thiết kế ứng dụng, người dùng cần một giao diện giám sát và điều khiển thân thiện, đồng thời có thể phát triển thêm các tính năng như hiển thị kết quả dưới dạng đồ thị chart , lưu trữ dữ liệu theo thời gian chỉ định hay điều khiển trạng thái các thiết bị chỉ với 1 click chuột trên máy tính.

Chúng ta sẽ giải quyết những vấn đề trên thông qua ứng dụng đọc nhiệt độ, độ ẩm của môi trường và gửi về server. Đây là một ứng dụng khá đơn giản, hữu ích và dễ làm. Thông qua phần này chúng ta có thể xây dựng được một ứng dụng IoT thực tế, nắm bắt được các kiến thức cơ bản về thu thập dữ liệu, xây dựng thiết bị và server.

Phần nâng cao: HTTP Server lưu trữ dữ liệu, và cung cấp file HTML cho người dùng có thể xem qua Browser. Chúng ta cần 1 Web Server viết bằng Javascript, thực thi bởi Node. js, lắng nghe ở Port được chỉ định trên máy tính cá nhân. Ở đây là port Máy tính phải có kết nối cùng mạng WiFi nội bộ với ESP và cần biết địa chỉ IP của máy tính để ESP có thể truy cập, ví dụ IP là ESP sau khi kết nối vào mạng WiFi nội bộ, sẽ tiến hành đọc thông số nhiệt độ, độ ẩm từ cảm biến DHT11 và gởi về Server sau mỗi 2 giây.

html chứa mã Javascript có thể yêu cầu lấy dữ liệu nhiệt độ, độ ẩm lưu trong RAM, và hiển thị lên biểu đồ. Tuy nhiên cũng đừng quá lo lắng nếu bạn chưa từng dùng những thứ này, chúng ta sẽ hiểu nó khi đọc các phần tiếp theo.

DHT11 là cảm biến có chức năng đo nhiệt độ, độ ẩm của môi trường, được dùng khá phổ biến vì giá thành thấp và độ ổn định cao. Cảm biến sử dụng chuẩn truyền dữ liệu OneWire. Thông tin chi tiết về DHT11 có thể xem tại Datasheet. OneWire là chuẩn giao tiếp nối tiếp được thiết kế bởi hãng Dallas. Đó là hệ thống bus nhằm kết nối các thiết bị với nhau để truyền hoặc nhận dữ liệu. Trong chuẩn giao tiếp này thường chỉ sử dụng 1 chân đồng thời là vừa là nguồn cung cấp vừa là chân truyền nhận dữ liệu.

Master ESP gửi tín hiệu START , DHT11 sẽ chuyển từ chế độ tiết kiệm năng lượng low-power mode sang chế độ làm việc bình thường high-speed mode. DHT11 nhận được tín hiệu và phản hồi đến master, master nhận tín hiệu và bắt đầu quá trình truyền dữ liệu.

Khi muốn kết thúc, Master sẽ gửi tín hiệu STOP , kết thúc quá trình truyền nhận dữ liệu. Chi tiết về chuẩn OneWire xem tại maximintegrated.

Một trong những địa chỉ web để học HTML cho người mới bắt đầu là w3school. Để tạo server dùng Node. js cần trang bị một số kiến thức cơ bản về Javascript và Node. js, để học Javascript chúng ta có thể truy cập địa chỉ URL w3school. js thì codeschool. com thật sự hữu ích với người mới bắt đầu. Về phía Web Server, chúng ta cần đảm bảo nó có thể phục vụ cho nhiều Client, với path là:. Bạn có thể truy cập đến đường dẫn của file server. js và thực thi đoạn code trên với dòng lệnh node server.

js , sau đó thử truy vập vào localhost để xem trang index. Ở phần cơ bản chúng ta chưa cần phải quan tâm đến file index. html và đoạn code Javascript trong đó. Khi đã hoàn thành phần cơ bản chúng ta sẽ đi đến một ứng dụng khá phổ biến, người dùng cần hiển thị các dữ liệu thu thập một cách trực quan thông qua trình duyệt Web. Vì vậy chúng ta sẽ làm 1 file index. html chứa mã nguồn Javascript có thể yêu cầu Server trả về dữ liệu mỗi giây để hiển thị lên 1 biểu đồ canvas.

Việc lấy dữ liệu được thực thi bằng hàm httpGetAsync. Hàm này sử dụng đối tượng XMLHttpRequest để lấy dữ liệu từ server mà không cần phải load lại trang, dữ liệu xmlHttp. Sử dụng window. ESP sử dụng thư viện HTTPClient để kết nối tới Web Server và lấy dữ liệu nhiệt độ, đổ ẩm thông qua phương thức GET với query là temp và humd. Thư viện hỗ trợ lấy dữ liệu của DHT Trong bài này chúng ta sẽ cài đặt và sử dụng thư viện DHT sensor library của Adafruit.

Thông tin hiển thị như bên dưới:. Xây dựng 1 dự án giám sát và điều khiển nhiệt độ, độ ẩm hiển thị trên web với giao diện điều khiển :. Sau khi hoàn thành dự án, chúng ta đã có cái nhìn tổng quan về trình tự các bước để xây dựng một dự án hoàn chỉnh trong việc thu thập dữ liệu của cảm biến cũng như xây dựng server để quản lí các máy khách. Từ đó là bước đệm để giúp bạn phát triển thêm nhiều các dự án thu thập và xử lí dữ liệu trong tương lai.

Tuy nhiên, các ứng dụng nhúng sử dụng Wi-fi thường ít chú trọng đến giao diện người dùng user interface , không có bàn phím hay touchscreen,.. để giao tiếp. Vì thế, mỗi khi muốn kết nối thiết bị ESP với một Access Point nào đó, bạn cần phải có một máy tính đã cài đặt sẵn phần mềm biên dịch, tiếp theo là viết code cấu hình lại thông số wifi cho thiết bị, sau đó nạp code cho thiết bị thông qua một cable USB.

Điều này làm cho việc kết nối wifi trở nên khá bất tiện và phức tạp. Do vậy ESP cung cấp các phương pháp thay thế khác giúp đơn giản hóa việc kết nối trạm ESP chế độ Station với một điểm truy cập. Đó là kết nối bằng SmartConfig , WPS hay Wifi Manager.

SmartConfig là một giao thức được tạo ra nhằm cấu hình cho các thiết bị kết nối với mạng WiFi một cách dễ dàng nhất bằng smart phone. Nói một cách đơn giản, để kết nối WiFi cho thiết bị ESP, ta chỉ cần cung cấp thông tin mạng wifi bao gồm SSID và password cho ESP thông qua 1 ứng dụng trên smart phone. Chúng ta nên biết rằng, khi 1 điện thoại thông minh đã kết nối vào mạng WiFi có mật khẩu, thì toàn bộ dữ liệu trao đổi giữa Điện thoại và đầu mối khác trong mạng sẽ được mã hóa.

Nghĩa là các thiết bị chưa được kết nối mạng và không có mật khẩu thì không thể giải mã được dữ liệu. Vậy làm thế nào để Ứng dụng trên điện thoại gởi thông tin kết nối này đến 1 thiết bị khác chưa hề kết nối mạng. Để làm được điều này, thì nhờ vào 2 đặc điểm sau:. ESP có khả năng lắng nghe tất cả các gói tin không dây WiFi xung quanh nó, bao gồm cả các gói tin đã được mã hóa. Các gói tin gởi trong mạng WiFi được mã hóa và không thể đọc được nội dung, tuy nhiên độ dài gói tin là một hằng số.

Cách thức để giao thức ESPTOUCH thực hiện việc gởi thông tin SSID và mật khầu cho thiết bị như sau:. Ứng dụng trên điện thoại sẽ tiến hành gởi các gói tin với nội dung bất kỳ, nhưng có độ dài n theo từng ký tự của SSID và mật khẩu. ESP sẽ phát hiện ra các gói tin với độ dài thay đổi này và ghép nối lại thành SSID và password để kêt nối vào mạng. Khi ESP kết nối thành công đến mạng, ESP sẽ kết nối đến IP của Điện thoại, được cung cấp thông qua ESPTOUCH, và gởi thông tin kết nối thành công đến ứng dụng trên điện thoại.

Nếu thiết bị không thể kết nối với router trong khoảng thời gian quy định thì ứng dụng sẽ trả về thông báo cấu hình thất bại. Trong quá trình cấu hình kết nối thiết bị bằng SmartConfig, thiết bị phải được cài đặt ở chế độ Station.

Trong ví dụ dưới đây, chúng ta sẽ tiến hành kết nối wifi cho board ESP bằng SmartConfig. Sử dụng ứng dụng ESP SmartConfig Android. Bạn có thể dễ dàng tìm thấy ứng dụng này cũng như các ứng dụng tương tự trên Play Store Android hay iTunes iOS để thực hiện việc kết nối bằng SmartConfig này.

Trước tiên, ta sẽ nạp chương trình cho ESP Điểm mấu chốt trong chương trình này chính là hàm WiFi. beginSmartConfig được cung cấp trong thư viện ESPWiFi.

Hàm này cho phép thiết bị khởi động chế độ SmartConfig, thu thập các thông tin từ các gói tin và giải mã chúng để có thể kết nối vào mạng Wifi. Sau khi nạp xong chương trình, ta nhấn giữ button GPIO0 trong 3s để thiết bị đi vào chế độ smartconfig.

Lúc này bạn sẽ thấy led trên board nhấp nháy nhanh hơn. Dùng smart phone của bạn truy cập vào wifi muốn kết nối, sau đó mở ứng dụng smartconfig và nhập các thông tin SSID và PASSWORD nếu có của wifi.

Nhấn CONFIRM để xác nhận. Nếu đã từng cấu hình cho một router wifi, sẽ gặp qua các thuật ngữ WPS trong các menu cấu hình của router. Hoặc từng nhìn thấy một nút nhấn trên các router với chữ viết bên cạnh WPS. Vậy WPS là gì? Quá trình thực hiện kết nối như thế nào? Cũng như thực hiện WPS với ESP, là những những nội dung sẽ được nói đến ở phần này.

WPS là từ viết tắc của Wifi Protected Setup, một phương thức giúp việc kết nối với mạng không dây giữa router và thiết bị kết nối không dây một cách nhanh chóng và dễ dàng, thay vì làm một cách thủ công: tìm mạng wifi cần kết nối và nhập mật khẩu để vào mạng wifi. WPS có ba chế độ hoạt động : chế độ kết nối với mã PIN, chế độ kết nối bằng nút nhấn, và chế độ kết nối NFC - Near Field Communication chưa phổ biến.

Một trong những chế độ phổ biến và sẽ thực hiện trong phần này là chế độ kết nối bằng nút nhấn. Nhấn nút WPS trên router, để giúp router vào chế độ bảo mật đặc biệt, ở chế độ này router sẽ cho phép các yêu cầu kết nối đến router từ các thiết bị WPS các thiết bị có hổ trợ WPS. Tiếp theo là nhấn nút nhấn ở thiết bị WPS. Nút nhấn này giúp thiết bị WPS kết nối đến router, việc kết nối này có thể thất bại nếu quá thời gian. Thời gian này được nhà sản xuất các thiết bị hổ trợ chế độ này quy đinh, khoảng từ 1 phút đến 5 phút.

ESP hổ trợ hàm WiFi. beginWPSConfig trong thư viện ESPWiFi. Với hàm này giúp ESP vào chế độ cấu hình với WPS và kết nối đến mạng wifi của router. Ví dụ này ESP sẽ được đưa sẳn vào chế độ WPS, mà không cần thêm nút nhấn nào. WifiManager là một thư viện cấu hình ESP kết nối vào mạng WiFi cục bộ sử dụng giao diện Web. Bằng cách khởi động 1 mạng WiFi riêng với Captive Portal, ESP sẽ cho phép các thiết bị khác như máy tính, điện thoại thông minh kết nối vào, đồng thời chuyển hướng mọi kết nối đến giao diện Web do ESP tạo nên.

Trên giao diện này, sẽ cung cấp các trường để người dùng có thể dễ dàng quét mạng xung quanh, chọn mạng WiFi, nhập mật khẩu, lưu cấu hình. Khi ESP khởi động, ESP sẽ vào chế độ STATION và sẽ tự động kết nối đến một Access Point với các thông tin kết nối đã được lưu vào ESP ở lần kết nối thành công trước đó. Nếu như kết nối không thành công có thể là Access Point lần trước không còn nữa, hay sai mật khẩu, hoặc chưa có thông tin của bất cứ Access Point nào trong ESP , lúc này ESP sẽ vào chế độ AP với một DNS trỏ về chính nó có thể thiết lập DNS trỏ về địa chỉ khác và khởi động Web Server với địa chỉ mặc định là Có thể thấy một giao diện với tên AP của ESP là mặc định và không cài đặt mật khẩu cho ESP AP tương tự như sau :.

Sau khi vào được giao diện option của ESP AP ở địa chỉ Nếu ESP kết nối thành công, ta sẽ không thấy tên của ESP AP nữa. Nếu chưa thành công thì chỉ cần kết nối lại ESP AP và cấu hình lại. Cài đặt thư viện: github. Các thông tin API và ví dụ bạn có thể dễ dàng tìm thấy tại github. Để triển khai một ứng dụng IoT thực tế thì đòi hỏi rất nhiều vấn đề, một trong số những điều quan trọng là dễ dùng, dễ cấu hình cho người sử dụng và phải bảo mật trong quá trình cung cấp thông tin cho thiết bị.

Tùy thuộc vào nhu cầu phát triển sản phẩm và tính năng của sản phẩm mà bạn có thể lựa chọn cho mình phương pháp cấu hình phù hợp.

Ví dụ, nếu thiết bị có nút nhấn và có phần mềm trên điện thoại, thì SmartConfig và WPS là một sự lựa chọn. Nếu là 1 bóng đèn trống trơn không có gì cả, thì WiFiManager lại hữu hiệu. Bởi vì giao thức này sử dụng băng thông thấp trong môi trường có độ trễ cao nên nó là một giao thức lý tưởng cho các ứng dụng M2M. Và MQTT là gì? Trong một hệ thống sử dụng giao thức MQTT, nhiều node trạm gọi là mqtt client - gọi tắt là client kết nối tới một MQTT Server gọi là Broker.

Quá trình đăng ký này gọi là "subscribe" , giống như chúng ta đăng ký nhận tin trên một kênh Youtube vậy. Mỗi Client sẽ nhận được dữ liệu khi bất kỳ trạm nào khác gởi dữ liệu vào kênh đã đăng ký. Khi một Client gởi dữ liệu tới kênh đó, gọi là "publish". Xem thêm QoS : code. Một gói tin có thể được gởi ở bất kỳ QoS nào, và các Client cũng có thể subscribe với bất kỳ yêu cầu QoS nào.

Có nghĩa là Client sẽ lựa chọn QoS tối đa mà nó có để nhận tin. Ví dụ, nếu 1 gói dữ liệu được publish với QoS2, và Client subscribe với QoS0, thì gói dữ liệu được nhận về Client này sẽ được broker gởi với QoS0, và 1 Client khác đăng ký cùng kênh này với QoS 2, thì nó sẽ được Broker gởi dữ liệu với QoS2. Một ví dụ khác, nếu 1 Client subscribe với QoS2 và gói dữ liệu gởi vào kênh đó publish với QoS0 thì Client đó sẽ được Broker gởi dữ liệu với QoS0. QoS càng cao thì càng đáng tin cậy, đồng thời độ trễ và băng thông đòi hỏi cũng cao hơn.

Nếu RETAIN được set bằng 1, khi gói tin được publish từ Client, Broker PHẢI lưu trữ lại gói tin với QoS, và nó sẽ được gởi đến bất kỳ Client nào subscribe cùng kênh trong tương lai. Và phải lưu gói tin này lại, nhưng hoàn toàn có thể huỷ bất kỳ lúc nào. RETAIN phải bằng 0 nếu không quan tâm tới kết quả của việc subscribe.

Gói tin LWT last will and testament không thực sự biết được Client có trực tuyến hay không, cái này do gói tin KeepAlive đảm nhận. Tuy nhiên gói tin LWT như là thông tin điều gì sẽ xảy đến sau khi thiết bị ngoại tuyến.

Tôi có 1 cảm biến, nó gởi những dữ liệu quan trọng và rất không thường xuyên. Trong quá trình hoạt động, cảm biến luôn giữ kết nối với Broker bởi việc luôn gởi gói tin keepAlive. Nhưng nếu vì lý do gì đó, cảm biến này chuyển sang ngoại tuyến, kết nối tới Broker timeout do Broker không còn nhận được gói keepAlive. Ngoài việc đóng kết nối của Client đã ngoại tuyến, gói tin LWT có thể được định nghĩa trước và được gởi bởi Broker tới kênh nào đó khi thiết bị đăng ký LWT ngoại tuyến.

Như chúng ta đã tìm hiểu ở phần trước, 2 thành phần publisher và subscriber là đặc trưng tạo nên giao thức MQTT. Các MQTT Client không kết nối trực tiếp với nhau, mọi gói dữ liệu được gửi đi đều thông qua MQTT Broker.

Để có thể triển khai các ứng dụng của MQTT Client, chúng ta cần MQTT Broker sẽ được trình bày trong phần sau. Ở phần này chúng ta sẽ làm quen với giao thức MQTT bằng các ví dụ sử dụng MQTT Client thông dụng và các dịch vụ MQTT Broker miễn phí và phổ biến, 2 trong số chúng là test.

org và cloudmqtt. Đây là một công cụ rất hữu ích để kiểm tra kết nối đến MQTT Broker và kiểm tra việc gửi và nhận gói tin. Chúng ta sẽ sử dụng công cụ này với dịch vụ MQTT Broker tại iot.

org được trình bày như các bước bên dưới:. Bước 1: Cài đặt trình duyệt Chrome, thực hiện đăng nhập tài khoản của bạn vào chrome, truy cập vào địa chỉ chrome. Chúng ta sẽ tạo 1 connection có tên eclipse MQTT với host name của MQTT Broker là iot. org , Broker này sẽ giúp trao đổi dữ liệu của các Client với nhau và lắng nghe các Client ở port port sử dụng giao thức MQTT và không mã hóa dữ liệu, các port khác tham khảo tại test. Tạo nhiều connection để subcribe và publish các gói tin với MQTT Broker iot.

org đồng thời test các gói tin với QoS và LWT. js là một thư viện MQTT client, được viết bằng ngôn ngữ JavaScript trên nền tảng Node. js và hỗ trợ MQTT Over Websocket MOW. js là dự án mã nguồn mở open source , bạn có thể tải MQTT. js bản cập nhật mới nhất tại github. Trước tiên ta cần kiểm tra hệ điều hành đã hỗ trợ Node. js trước khi cài đặt MQTT. Nếu chưa thì có thể tham khảo cách cài đặt tại nodejs. Khởi tạo một dự án Node. Để dễ quản lý, có thể tạo một thư mục riêng, ví dụ mqtt-client và một file javascrip trong đó, ví dụ như client-a.

Đi đến thư mục này và mở terminal linux OS hoặc Command Prompt trên Windowns OS và dùng lệnh:. json với nội dung là các phần đã khai báo.

File này cũng chứa thuộc tính dùng để lưu trữ các package chúng ta đã cài đặt. Sau khi cài đặt xong, bạn có thể sử dụng module mqtt để thực hiện việc kết nối MQTT Client với Broker, publish message hay subscribe topic.

Để hiểu rõ hơn cách hoạt động của MQTT. js, chúng ta sẽ tạo ra thêm 1 số file mã nguồn Javascript file. js là client-a. js và client-b. js thực hiện subcribe và puslish các gói tin. Ngoài ra, MQTT. js còn cung cấp thêm các lệnh để có thể tương tác với Broker thông qua terminal.

Để làm được điều này, chúng ta cài đặt MQTT. js như một module toàn cục bằng cách sử dụng lệnh:. Bạn có thể kiểm tra bằng cách mở 2 màn hình terminal, ở màn hình 1 tạm gọi là subscriber sẽ subscribe vào topic tên là "topicA" bằng lệnh:. Ở terminal thứ 2 tạm gọi là publisher thực hiện publish một tin nhắn với nội dung "hello subscriber" tới "topicA":.

Thực tế có khá nhiều thư viện MQTT cho ESP trên Arudino, ở đây chúng ta chỉ đề cập đến 2 thư viện phổ biến là PubSubClient và ESPMQTTClient. Trong phần này chúng ta sẽ thực hiện kết nối board ESP WiFi Uno đến 1 broker sử dụng thư viện PubSubClient. Bước 1 : Download thư viện PubSubClient tại đường dẫn github. Bước 2 : Viết và nạp chương trình cho ESP Mã nguồn được trình bày ở phía dưới. Chúng ta sẽ tạo một biến espClient thuộc lớp WiFiClient , biến này được khai báo là MQTT Client và sử dụng các thuộc tính của thư viện PubSubClient.

Tại hàm setup sẽ thiết lập ESP ở chế độ station, kết nối đến mạng wifi. Bên cạnh đó hàm setup cũng sẽ thực hiện chức năng tự động kết nối lại với MQTT Broker khi xảy ra mất kết nối đồng thời thực hiện các chức năng publish, subscribe của 1 MQTT Client thông qua hàm reconnect.

Hàm callback có nhiệm vụ lấy dữ liệu của các puslisher khi publish 1 message sau đó gửi đến các client đã subscribe topic đó và kiểm tra nội dung của message để điều khiển led ở GPIO Hàm loop có chức năng kết nối Client là ESP với Broker, thực hiện chức năng publish 1 message và subscribe topic.

Bước 3 : Mở MQTT lens trên trình duyệt Chrome, tạo 1 connection với host name broker. com , sử dụng port Sau khi nhấn nút subscribe trên MQTT lens sẽ xuất hiện 1 message gửi từ esp với nội dung connnected. Nếu pushlish message với nội dung on , led GPIO16 trên board sẽ sáng, pushlish message off led GPIO16 trên board sẽ tắt. Các message với nội dung khác thì vẫn sẽ hiển thị dữ liệu nhận được trên serial terminal của Arduino nhưng sẽ không có tác dụng điều khiển led GPIO Kết quả hiển thị như hình bên dưới:.

Tiếp theo, chúng ta sẽ tìm hiểu cách sử dụng thư viện ESPMQTTClient, thư viện được cộng đồng developer đánh giá là ổn định dễ sử dụng hơn so với thư viện PubSubClient thông qua 1 ứng dụng điều khiển led trên board ESP WiFi Uno bằng 1 ứng dụng trên điện thoại smartphone. Bước 1 : Download thư viện ESPMQTTClient tại đường dẫn github. Ngoài ra có thể import thư viện này trong Arduino bằng cách tìm kiếm thư viện với từ khóa ESPMQTT , chọn thư viện của tác giả Tuan PM, version 1.

Tương tự như mã nguồn của chương trình sử dụng thư viện pubsubCLient, chúng ta cũng sẽ khởi tạo ESP là MQTT Client trong class MQTT của thư viện ESPMQTTClient. Cài đặt ESP ở chế độ Station và kết nối đến network wifi. Chức năng của các hàm trong thư viện đã được giải thích ở file mã nguồn, ở hàm mqtt.

Hàm mqtt. onData sẽ nhận, kiểm tra và xử lí dữ liệu nhận được từ topic đã subscribe. Ở đây ta sẽ dùng 1 public MQTT Broker là iot. org, sử dụng phương thức Websocket là lắng nghe các MQTT Client ở port 80, đây là port mặc định khi sử dụng Websocket.

Việc gửi nhận dữ liệu bằng phương thức Websocket sẽ giúp giảm băng thông và độ trể khi truyền nhận dữ liệu thông qua giao thức MQTT. Chi tiết về Websocket chúng ta sẽ được học ở các bài học sau.

Ở loop chúng ta chỉ cần gọi hàm handle để khởi tạo và kiểm tra các thuộc tính của giao thức cũng như xử lí, truyền và nhận dữ liệu từ các topic đã subscribe và public. Truy cập vào App Store trên hệ điều hành iOS hoặc CH Play trên hệ điều hành Android. nhập từ khóa IoT Smartconfig và cài đặt ứng dụng IoT Smartconfig của developer Tuan PM. Hình ảnh ứng dụng hiển thị như bên dưới:. Ứng dụng này sử dụng với ESP và ESP32, ngoài chức năng cơ bản là publish, subscribe của giao thức MQTT, ứng dụng còn có chức năng smartconfig để ESP và ESP32 có thể dễ dàng thiết lập kết nối với các network wifi khác nhau một cách thuận tiện và nhanh chóng mà không phải nạp lại mã nguồn.

Ở phần trước chúng ta sử dụng các dịch vụ MQTT Broker miễn phí để thử nghiệm, tuy nhiên ta có thể sẽ phải trả phí dịch vụ với những ứng dụng lớn cần băng thông rộng và tốc độ đáp ứng nhanh, cộng với việc dữ liệu có thể bị tấn công do độ bảo mật thông tin chưa cao.

Do đó, ở phần này, chúng ta sẽ tự mình xây dựng 1 MQTT Broker. Việc tự thiết lập 1 MQTT broker giúp chúng ta có thể sử dụng giao thức MQTT trên máy local mà không cần kết nối đến các dịch vụ MQTT Broker ở mạng internet.

Quá trình truyền, nhận và xử lí dữ liệu diễn ra 1 cách nhanh chóng cũng như bảo mật thông tin của người dùng. Tuy nhiên, để tạo được 1 MQTT Broker với đầy đủ tính năng của giao thức MQTT đòi hỏi chúng ta phải có kiến thưc tốt về giao thức MQTT cũng như các ngôn ngữ lập trình bổ trợ cho việc xây dựng nó.

Để bắt đầu, ta sẽ tạo ra 1 MQTT Broker đơn giản bằng cách dùng 1 module hỗ trợ sẵn có đó là Mosca. Mosca là 1 trong số rất nhiều server MQTT Broker của giao thức MQTT. Có thể kế đến các server khác như HiveMQ, Apache Apollo, Mosquitto, Mongoose. Mosca có 1 số đặc điểm như sau:. Nó là 1 Node. js Broker, được viết bằng ngôn ngữ JavaScript vì vậy để có thể xây dựng MQTT Broker, chúng ta cần Node. js để chạy.

Mosca có thể nhúng vào ứng dụng của bạn nếu ứng dụng này được viết bằng Node. Mosca là 1 multi-transport MQTT Broker, có nghĩa là nó hỗ trợ tất cả các chức năng publish, subscribe của các broker khác. Ở phần này chúng ta sẽ tạo ta 1 MQTT Broker đơn giản dùng Mosca với sự hỗ trợ của cơ sở dữ liệu Mongodb. Chúng ta sẽ tạo 1 MQTT Client là ESP và 1 MQTT Client trên máy tính sử dụng MQTT.

js nhằm kết nối đến MQTT Broker , subscribe topic và publish các message. Dùng Mosca tạo 1 MQTT Broker trên máy tính cá nhân nhằm broadcast messages truyền bá các gói tin đến các MQTT Client. Bước 1 : Trước tiên, chúng ta nên tạo 1 folder để thiết lập 1 MQTT Broker trên máy local. Đi đến folder này, tạo file package. js bằng lệnh npm init và thiết lập các thông tin của dự án.

Tiếp theo, cài đặt module mosca bằng lệnh npm install mosca --save. Để cài đặt MongoDB, chúng ta sẽ truy cập vào điạ chỉ docs. Sau khi cài đặt xong, chúng ta sẽ mở port port mặc định khi dùng mongodb, chúng ta có thể điều chỉnh port ở file cấu hình của mongodb để lắng nghe các kết nối từ client thông qua lệnh sudo service mongod start.

Trên hệ điều hành Linux, có thể kiểm tra các kết nối trên hệ thống bằng lệnh Netstat như hình dưới:. Bước 2 : Tạo file Javascript để viết mã nguồn cho MQTT Broker. Ví dụ về mã nguồn của file serverMosca.

js được viết bên dưới:. Bước 3 : Viết mã nguồn cho ESP Để nhanh chóng, chúng ta sẽ dùng mã nguồn của thư viện ESPMQTTClient đã viết ở mục trước. Sửa đổi địa chỉ của MQTT Broker từ mqtt. org" ; thành mqtt. Bước 4 : Tạo MQTT Client dùng MQTT. Chúng ta sẽ tạo 1 folder để chứa các file của MQTT Client. Tương tự như bước 1 , dùng npm init để tạo file package. js và thiết lập các thông tin của dự án.

Tiếp theo cài đặt module mqtt bằng lệnh npm install mqtt --save và tạo file Javascript để viết nội dung cho MQTT Client.

Ví dụ về mã nguồn file moscaClient. js được trình bày bên dưới:. Trên terminal, đi đến thư mục chứa file moscaServer. js và khởi chạy server bằng lệnh node moscaServer. Server sẽ khởi động và lắng nghe các kết nối đến từ các MQTT Client.

Tiếp theo, nạp chương trình trên Arduino cho ESP, sau đó khởi chạy MQTT Client trên máy tính bằng lệnh node moscaClient. Khi có các sự kiện kết nối , ngắt kết nối, pushlish 1 message hay subcrible 1 topic đến từ các client thì bên phía server đều sẽ hiển thị nội dung và thông tin.

Các terminal hiển thị kết quả như hình bên dưới:. Mosquitto là 1 MQTT Broker viết bằng ngôn ngữ lập trình C. Một số đặc điểm nổi bật của mosquitto là tốc độ truyền nhận và xử lí dữ liệu nhanh, độ ổn định cao, được sử dụng rộng rãi và phù hợp với những ứng dụng embedded. Một số nhược điểm của mosquitto là khó thiết kế khi làm những ứng dụng lớn và ít phương thức xác thực thiết bị nên khả năng bảo mật vẫn chưa tối ưu.

EMQ Erlang MQTT Broker là một MQTT Broker được viêt bằng ngôn ngữ lập trình Erlang. Ưu điểm của EMQ là tính ổn định cao, thích hợp để thiết kế các hệ thống lớn do khả năng mở rộng ứng dụng dễ dàng cũng như khá dễ để cài đặt.

Ngoài ra EMQ còn hỗ trợ nhiều phương thức xác thực người dùng, phát triển và cập nhật tính năng liên tục bởi cộng đồng developer. Tuy nhiên điểm yếu của MQTT broker này là khó đối với những người mới bắt đầu.

Thông tin về EMQ có thể xem tại trang emqttd-docs. WebSoket là công nghệ hỗ trợ giao tiếp hai chiều giữa client và server bằng cách sử dụng một TCP socket để tạo một kết nối liên tục, hiệu quả và ít tốn kém. Mặc dù được thiết kế để chuyên sử dụng cho các ứng dụng web, lập trình viên vẫn có thể đưa chúng vào bất kì loại ứng dụng nào. WebSockets mới xuất hiện trong HTML5, cho phép các kênh giao tiếp song song hai chiều và hiện đã được hỗ trợ trong nhiều trình duyệt.

Kết nối được mở thông qua một HTTP request yêu cầu HTTP , với những header đặc biệt thông báo cho Server có hỗ trợ chuyển sang kết nối Websocket. Kết nối này được duy trì để bạn có thể gởi và nhận dữ liệu một cách liên tục, không đứt quãng, và không cần bất kỳ HTTP header overhead nào nữa.

Websocket hỗ trợ cho các trình duyệt phổ biến hiện nay như: Google Chrome, Microsoft Edge, Internet Explorer, Firefox, Safari và Opera. WebSockets cung cấp khả năng giao tiếp hai chiều với kết nối được duy trì, có độ trễ thấp, giúp Server dễ dàng giao tiếp với Client. Do đó, websocket sẽ phù hợp cho các ứng dụng real-time, người dùng sẽ không mất thời gian phải reload lại trình duyệt để cập nhật thông tin mới nhất như khi sử dụng giao thức HTTP.

Giao thức Websocket chưa được tất cả các trình duyệt đã có hiện nay hỗ trợ. Websocket cũng đòi hỏi các ứng dụng web trên server để hỗ trợ nó. Trong phần này, chúng ta sẽ thiết lập ứng dụng sử dụng ESP như 1 Websocket Server và Trình duyệt như là một Web Socket Client để cập nhật trạng thái nút nhấn, cũng như điều khiển đèn LED trên board thời gian thực thông qua Trình duyệt.

Khi truy cập vào địa chỉ IP của ESP sẽ trả về 1 file HTML bao gồm nội dung của đoạn Javascript thiết lập kết nối Websocket đến ESP đồng thời lắng nghe các gói tin từ ESP Server. Khi nhấn nút trên board ESP sẽ gởi nội dung trạng thái nút nhất đến Web Browser hiển thị dạng hộp kiểm checkbox , nhấn nút là có kiểm, không nhấn nút là không có kiểm.

Thư viện ESPAsyncWebServer dùng cho việc thiết lập HTTP server và websocket server cho module ESP, và xử lí các sự kiện trên server-client. Để các chương trình dùng thư viện ESPAsyncWebserver hoat động, ta cần dùng thêm thư viện ESPAsyncTCP.

Sau khi biên dịch xong code trên Arduino, ta vào browser, truy cập vào địa chỉ IP của ESP đã trả về trên Serial Monitor cùng với port đã thiết lập trên server, ở trường hợp này là Trong một số ứng dụng khác, chúng ta có 1 Server Websocket để thực hiện các tác vụ thời gian thực như Ứng dụng điện thoại, trình duyệt Web. Thì ESP có thể kết nối trực tiếp vào các server này như 1 Websocket Client để tiếp nhận, hoặc gởi thông tin thông qua Websocket. Một số dịch vụ sử dụng Websocket điển hình như dịch vụ tin nhắn Slack , dịch vụ cơ sở dữ liệu thời gian thực Firebase.

Ở phần này, chúng ta sẽ sử dụng Node. js để tự xây dựng 1 Web server, vừa đóng vai trò là 1 Websocket Server. Có những tính năng:. Có thể cung cấp file index. html chứa các đoạn mã javascript tạo kết nối Websocket giữa trình duyệt với Server, giống như phần Server Nodejs.

Server sẽ broadcast tất cả các gói tin từ bất kỳ 1 client nào gởi đến, tới tất cả các client còn lại. Với tính năng như trên thì bạn có thể hình dung như sau: Nếu 1 cửa sổ trình duyệt có kết nối Websocket đến Server, khi nhấn 1 nút kiểm, thì sẽ gởi về server trạng thái của nút kiểm đó. Với file index. html có chứa mã nguồn Javascript tạo kết nối đến Websocket, để cùng thư mục với file server.

Trong phần này chúng ta cần dùng thư viện Websocket ws github. Bạn có thể cài đặt bằng cách:. Việc sử dụng giao thức websocket sẽ có nhiều lợi ích cho các kết nối 2 chiều, luôn được duy trì và có độ trễ thấp.

Các phương pháp phát triển phần mềm và sản phẩm phổ biến hiện nay, thì xuất bản kết quả từng giai đoạn thường mang lại hiệu quả cao, sản phẩm có thể đến tay người dùng sớm, nhận được phản hồi sớm từ khách hàng, và được điều chỉnh để hợp lý hơn. Chính việc phát hành sản phẩm sớm thường sẽ ít tính năng và cần cập nhật thêm tính năng, nâng cao chất lượng sản phẩm trong tương lai. Cập nhật Ứng dụng từ xa trên các phần mềm điện thoại, máy tính đã rất phổ biến. Đối với các sản phẩm phần cứng cũng tương tự, chúng ta nên bổ sung các tính năng cập nhật từ xa ngay từ giai đoạn phát triển sản phẩm.

Ngoài việc giúp nâng cấp các tính năng trong tương lai một cách dễ dàng, thì vấn để sửa lỗi, nâng cấp hệ thống từ xa sẽ giúp tiết kiệm được rất nhiều chi phí và nguồn lực. Trong phần này, chúng ta sẽ tìm hiểu các phương pháp cập nhật từ xa cho ESP, làm sao để nạp Firmware không dây cho module, làm sao để ESP có thể tự tải Firmware về, làm sao để ESP có thể tự khởi động 1 HTTP Server để có giao diện Web upload firmware lên chip.

Cập nhật firmware OTA Over the Air là tiến trình tải firmware mới vào ESP module thay vì sử dụng cổng Serial. Tính năng này thực sự rất hữu dụng trong nhiều trường hợp giới hạn về kết nối vật lý đến ESP Module. Sử dụng OTA với tùy chọn dùng Arduino IDE trong quá trình phát triển, thử nghiệm, 2 tùy chọn còn lại phù hợp cho việc triển khai ứng dụng thực tế, cung cấp tính năng cập nhật OTA thông qua web hay sử dụng HTTP Server.

Trong tất cả các trường hợp, thì Firmware hỗ trợ OTA phải được nạp lần đầu tiên qua cổng Serial, nếu mọi thứ hoạt động trơn tru, logic ứng dụng OTA hoạt động đúng thì có thể thực hiện việc cập nhật firmware thông qua OTA. Sẽ không có đảm bảo an ninh đối với quá trình cập nhật OTA bị hack. Nó phụ thuộc vào nhà phát triển đảm bảo việc cập nhật được phép từ nguồn hợp pháp, đáng tin cậy.

Khi cập nhật hoàn tất, ESP sẽ khởi động lại và thực thi code mới. Nhà phát triển phải đảm bảo ứng dụng thực trên module phải được tắt và khởi động lại 1 cách an toàn. Nội dung bên dưới cung cấp bổ sung các thông tin về an ninh, và an toàn cho tiến trình cập nhật OTA. Khi ESP được phép thực thi OTA, có nghĩa nó được kết nối mạng không dây và có khả năng được cập nhập Sketch mới. Cho nên khả năng ESP bị tấn công sẽ nhiều hơn và bị nạp bởi mã thực thi khác là rất cao. Để giảm khả năng bị tấn công cần xem xét bảo vệ cập nhật của bạn với một mật khẩu, cổng sử dụng cố định khác biệt, v.

Kiểm tra những tính năng được cung cấp bởi thư viện ArduinoOTA thường xuyên, có thể được nâng cấp khả năng bảo vệ an toàn:. Một số chức năng bảo vệ đã được xây dựng trong và không yêu cầu bất kỳ mã hóa nào cho nhà phát triển. ArduinoOTA và espota. py sử dụng Digest-MD5 để chứng thực việc tải firmware lên. Đơn giản là đảm bảo tính toàn vẹn của firmware bằng việc tính MD5.

Hãy phân tích rủi ro cho riêng ứng dụng của bạn và tùy thuộc vào ứng dụng mà quyết định những chức năng cũng như thư viện để thực hiện. Quá trình OTA tiêu tốn nguồn tài nguyên và băng thông của ESP khi tải lên. Sau đó, ESP được khởi động lại và một Sketch mới được thực thi. Cần phân tích và kiểm tra ảnh hưởng của quá trình này tới các chức năng cũ và sketch mới của ESP module.

Nếu ESP được đặt ở xa và điều khiển một vài thiết bị, ta nên chú ý tới hoạt động của thiết bị nếu thiết bị ngừng hoạt động đột xuất do quá trình cập nhật. Do đó, ta cần phải xác định được trạng thái làm việc an toàn của thiết bị trước quá trình cập nhật. Ví dụ, module được dùng để điều khiển hệ thống tưới nước tự động trong vườn.

Nếu trong quá trình hoạt động mà hệ thống điều khiển bị tắt đột ngột và các van bị mở, thì cả vườn sẽ bị ngập nước. Các hàm sau đây được cung cấp bởi thư viện ArduinoOTA và được dùng để xử lý ứng dụng trong quá trình cập nhật OTA hoặc để xử lý khi OTA gặp lỗi:.

Bộ nhớ Flash phải có đủ dung lượng để lưu cả sketch cũ đang vận hành trên hệ thống và sketch mới cập nhật OTA. Hàm ESP. getFreeSketchSpace ; được dùng để kiểm tra dung lượng trống cho sketch mới.

Sketch mới sẽ được chứa trong dung lượng trống gĩưa sketch cũ và spiff will be stored in the space between the old sketch and the spiff. Trước khi bắt đầu, cần phải chắc chắn Arduino IDE đã được cài đặt phiên bản mới nhất, bao gồm gói ESP cho Arudino, và Python 2. Khi module kết nối tới mạng WiFi thành công, sau vài giây, cổng espota sẽ xuất hiện trên Arduino IDE. Lúc này bạn hoàn toàn có thể bỏ kết nối Serial từ board mạch đến máy tính. Arduino IDE có thể nạp firmware mới thông qua WiFi.

Chọn port với địa chỉ IP hiện trên cửa sổ Serial Monitor ở bước trước. Sau khi đã chọn đúng cổng nạp OTA, bạn hoàn toàn có thể sửa lại firmware mới và nạp thông qua WiFi, tuy nhiên cần lưu ý như sau:. Firmware mới phải có các hàm khởi tạo và xử lý OTA như Bước 1: nạp firmware hỗ trợ OTA thông qua cổng Serial.

Bảo vệ quá trình upload OTA với password là một quá trình khá đơn gỉản. Những việc bạn cần làm là bổ sung đoạn mã nguồn:. Sau đó upload lại sketch một lần nữa dùng OTA. Sau khi biên dịch và upload xong, cửa sổ sẽ hiện lên yêu cầu nhập password:.

Nhập password, nếu đúng, kết quả là thông báo Authenticating OK và quá trình nạp diễn ra bình thường. Các lần nạp sau Arduino IDE sẽ nhớ mật khẩu và không hỏi lại, trừ khi bạn thay đổi mật khẩu OTA, và các bước xác thực không thành công, Arduino IDE sẽ hỏi lại bạn. Cần lưu ý là password có thể dễ dàng thấy được, nếu IDE không được đóng sau lần upload cuối cùng. Nếu việc cập nhật OTA thất bại, bước đầu tiên bạn cần làm là kiểm tra phần báo lỗi hiện trên cửa sổ Log của Arduino IDE.

Nếu việc này không giúp được bạn, hãy upload lại khi kiểm tra các thông tin của ESP hiện trên serial port. Khu vực dữ liệu cho SPIFFS quá nhiều, không còn đủ để chưa firmware, trong trường hợp bạn có 4MB Flash thì trường hợp này không xảy ra. Khi thực hiện cập nhật firmware dùng Web Browser, ESP sẽ khởi động 1 HTTP Server, với 1 form upload.

Khi truy cập đúng địa chỉ của nó, bạn sẽ được cung cấp 1 giao diện để chọn file binary, và upload lên Chip. Việc này hữu dụng khi không dùng Arudino IDE cho việc cập nhật, sử dụng luôn trình duyệt sẵn có. Hoặc tích hợp vào 1 ứng dụng mà bạn có thể muốn cập nhật nó trong tương. Cập nhật với web browser được thực hiện bằng thư viện ESPHTTPUpdateServer cùng với 2 thư viện khác ESPWebServer và ESPmDNS cho việc nhận diện ESP trong mạng nội bộ.

Cung cấp đúng SSID và mật khẩu mạng WiFi máy tính bạn đang dùng, nạp Firmware WebUpdater vào ESP Chọn Board ESP WiFi Uno trong Arduino IDE và Nạp chương trình xuống board dùng Arduino IDE. Khi bạn không thể truy cập vào module ESP theo công Serial, thì để nhận diện được địa chỉ IP của module trong mạng LAN, bạn cần chạy dịch vụ mDNS trên máy tính. Dịch vụ này sẵn có trong MacOS, tuy nhiên, với Linux thì bạn cần cài đặt Avahi: avahi.

Bài viết liên quan. Tính khoảng cách theo đường chim bay và thực tế trong Excel, Google Sheets. Thay đổi font chữ hàng loạt trong PowerPoint bằng VBA. Tạo công cụ theo dõi Portfolio tiền điện tử với Excel và Power Query. Đối tượng Range trong Excel VBA.

Power Automate Desktop là gì, ứng dụng thực tế của Power Automate Desktop. Đối tượng Worksheet trong Excel VBA. Khóa học liên quan.

Khóa học Tự động hóa Excel với lập trình VBA cho người mới bắt đầu. Khóa học Lập trình VBA nâng cao trong Excel. online Hộ kinh doanh Học Excel Online. Số ĐK: 17A Sản phẩm Khóa học Excel.

Khóa học VBA. Khóa học SQL. Khóa học Google Apps Script. Khóa học Power BI. Về tác giả. Danh mục khóa học EXCEL. POWER BI. Google Apps Script. Google Sheets. Power Query. Power Platform.

Ở bài trước mình đã giới thiệu qua với mọi người về ngôn ngữ python rồi, và ở đây mình nhắc lại một lần nữa là series này mình sẽ nói về python 3. Bài này chúng ta sẽ cùng nhau đi vào tìm hiểu về cách khai báo các kiểu dữ liệu trong Python. Python cũng giống như một số các ngôn ngữ bậc cao khác, khi ta khai báo biến thì kiểu dữ liệu của nó sẽ tự động được detect. Vì vậy nên chúng ta cũng không phải quá vất vả khi khai báo 1 biến. Từng bài sau mình sẽ đi vào chi tiết các kiểu dữ liệu này nên các bạn cũng không cần phải quá lo lắng vì chưa biết về nó nhé.

Trong lập trình, kiểu dữ liệu là một khái niệm rất quan trọng. Các biến có thể lưu trữ dữ liệu thuộc nhiều kiểu khác nhau và các kiểu khác nhau có thể làm những việc khác nhau.

Trong Python, kiểu dữ liệu được đặt khi bạn gán giá trị cho một biến. Nếu bạn muốn chỉ định kiểu dữ liệu, bạn có thể sử dụng các hàm khởi tạo sau:. Int, hoặc integer, là một số nguyên, dương hoặc âm, không có số thập phân, có độ dài không giới hạn.

Giống như nhiều ngôn ngữ lập trình phổ biến khác, chuỗi trong Python là các mảng byte đại diện cho các ký tự unicode. Tuy nhiên, Python không có kiểu dữ liệu ký tự, một ký tự đơn giản chỉ là một chuỗi có độ dài là 1.

Dấu ngoặc vuông có thể được sử dụng để truy cập các phần tử của chuỗi. Trong lập trình, bạn thường cần biết một biểu thức là True hoặc False. Bạn có thể đánh giá bất kỳ biểu thức nào trong Python và nhận được một trong hai câu trả lời, True hoặc False.

Khi bạn so sánh hai giá trị, biểu thức được đánh giá và Python trả về câu trả lời Boolean:. Và tất nhiên giá trị False đánh giá là False. List là một tập hợp được sắp xếp và có thể thay đổi. Trong Python, list được viết bằng dấu ngoặc vuông. tuple là một tập hợp được sắp xếp theo thứ tự và không thể thay đổi. Trong Python, tuple được viết bằng dấu ngoặc tròn. Bạn có thể truy cập phần tử của tuple bằng cách tham chiếu đến số chỉ mục, bên trong dấu ngoặc vuông:. Để tạo một bộ dữ liệu tuple chỉ có một phần tử, bạn phải thêm dấu phẩy sau phần tử đó, nếu không Python sẽ không nhận ra nó là một tuple.

Khi một tuple được tạo, bạn không thể thay đổi các giá trị của nó. Tuples là không thể thay đổi, hoặc cũng được gọi bất biến. Nhưng có một cách giải quyết. Bạn có thể chuyển đổi tuple thành một list, thay đổi list và chuyển đổi lại list thành tuple. set là một tập hợp không có thứ tự và không được lập chỉ mục.

Trong Python, set được viết bằng dấu ngoặc nhọn. Nhưng bạn có thể lặp qua các phần tử trong set bằng vòng lặp for hoặc kiểm tra xem giá trị được chỉ định có trong set hay không bằng cách sử dụng từ khóa in. dictionary là một tập hợp không có thứ tự, có thể thay đổi và được lập chỉ mục. Trong Python dictionary được viết bằng dấu ngoặc nhọn và chúng có các khóa và giá trị.

Do sự phổ biến của Python3, nên trong bài viết này cũng như các bài chia sẻ kiến thức cho các bạn tại chuyên đề Tự học python cho người mới bắt đầu, Kiyoshi mạn phép sẽ gọi và sử dụng hàm input trong Python3 là Hàm input trong Python và coi đây là hàm nhập dữ liệu mặc định. Chúng ta sẽ cùng tìm hiểu chi tiết về hàm này ở dưới đây. Hàm input trong Python là một hàm cài sẵn, có chức năng nhận dữ liệu nhập từ bàn phím vào Python và trả về kết quả dưới dạng kiểu chuỗi string str.

Trong đó prompt là đối số duy nhất của hàm input. Đây là một chuỗi ký tự bất kỳ có tác dụng hướng dẫn hoặc gợi ý về dữ liệu nhập vào. Bạn có thể tự do viết prompt hoặc có thể lược bỏ đi đối số này. Nếu bạn chỉ định một chuỗi ký tự trong đối số promtp khi sử dụng hàm input , chuỗi ký tự đó sẽ được hiển thị khi chờ nhập.

Nếu bạn lược bỏ promtp, sẽ không có gì sẽ được hiển thị trên màn hình và bạn sẽ không biết liệu mình có đang chờ nhập liệu hay không. Do đó Kiyoshi khuyên bạn sẽ tốt hơn nếu bạn sử dụng hàm input có kèm theo chỉ định đối số prompt trong hàm. Hàm input sẽ nhận dữ liệu nhập từ bàn phím và sau đó trả về kết quả là một chuỗi string str chứa dữ liệu được nhập. Chúng ta có thể gán kết quả này vào biến và sử dụng trong chương trình, ví dụ như in ra màn hình như sau:. Lưu ý là tất cả các loại dữ liệu nhập từ bàn phím vào Python bằng hàm input đều được trả về kết quả là một chuỗi string str.

Do đó kể cả bạn có nhập số từ bàn phím vào Python chăng nữa thì số này cũng sẽ được nhận dưới dạng kiểu chuỗi mà thôi. Chúng ta có thể kiểm tra kiểu dữ liệu của kết quả nhận được bằng hàm type như dưới đây:. Ở phần trên chúng ta đã biết cách sử dụng hàm input căn bản nhất để nhập dữ liệu trong Python rồi. Thực tế khi sử dụng hàm input trong Python, bằng cách kết hợp với các hàm hoặc phương thức khác, chúng ta sẽ có vô vàn cách sử dụng input khác nhau một cách đơn giản và thông mình hơn.

Kiyoshi sẽ giới thiệu cho bạn một số phương pháp sử dụng nâng cao của hàm input trong Python như dưới đây:. Bằng cách kết hợp với phương thức tách chuỗi split trong Python, chúng ta có thể nhập cùng lúc nhiều giá trị vào Python chỉ trên một dòng nhập dữ liệu. Chúng ta sẽ nhập cùng lúc nhiều dữ liệu trên một dòng vào Python bằng cách nhập tất cả các dữ liệu đó cách nhau bởi dấu cách, sau đó tách các dữ liệu đó ra bằng split và lưu kết quả dưới dạng list như sau:.

Bằng cách sử dụng kết hợp với cách viết nội hàm list comprehension, chúng ta có thể sử dụng hàm input để nhập nhiều dữ liệu trên nhiều dòng vào Python như sau:. Do sự phổ biến của Python3, nên trong bài viết này cũng như các bài chia sẻ kiến thức cho các bạn tại chuyên đề Tự học python cho người mới bắt đầu, Kiyoshi mạn phép sẽ gọi và sử dụng hàm print trong Python3 là hàm print trong Python và coi đây là hàm xuất dữ liệu mặc định.

Hàm print trong Python là một hàm cài sẵn, có chức năng hiển thị in dữ liệu ra màn hình khi chạy chương trình python. Tuy nhiên trong thực tế khi sử dụng hàm print trong Python, chúng ta lược bỏ hầu hết các đối số và sử dụng cú pháp đơn giản nhất sau đây:. Ví dụ, chúng ta chỉ định objects là 1 chuỗi ký tự và in ra màn hình dòng chữ I LOVE PYTHON như sau:. Lưu ý là các đối số sep, end, file và flush đều là các đối số keyword, do đó nếu bạn muốn sử dụng chúng trong hàm print thì phải viết cả keyword của nó.

Ví dụ như chúng ta sử dụng đối số end trong hàm print để in không xuống dòng trong Python như sau:. Nếu bạn bỏ quên không ghi keyword, mặc dù lỗi không xảy ra nhưng đối số đó sẽ bị Python coi như là một đối tượng cần in ra màn hình và bỏ qua chức năng của nó như sau:. Trong bài học này chúng ta sẽ xem xét chí tiết cách sử dụng kiểu dữ liệu bool trong Python. Đây là một kiểu dữ liệu đơn giản nhưng rất quan trọng để chuyển sang học về các cấu trúc điều khiển if-elif-else, while, for trong Python.

Kiểu bool Boolean trong Python là kiểu dữ liệu trong đó chỉ có hai giá trị True và False. True và False là hai từ khóa trong Python. Kiểu bool là kiểu kết quả trả về của các phép so sánh trên số và chuỗi mà bạn đã học trong các bài trước:. Python cũng có thể chuyển đổi giá trị của các kiểu khác về bool.

Chúng ta sẽ học về các kiểu dữ liệu này sau. Các phép toán trên kiểu bool, còn được gọi là số học Boolean, là các phép toán logic chỉ trả về kết quả True hoặc False. Python hỗ trợ số nguyên, số thập phân và số phức, chúng lần lượt được định nghĩa là các lớp int, float, complex trong Python. Số nguyên và số thập phân được phân biệt bằng sự có mặt hoặc vắng mặt của dấu thập phân. Ví dụ: 5 là số nguyên, 5.

Python cũng hỗ trợ số phức và sử dụng hậu tố j hoặc J để chỉ phần ảo. Ngoài int và float, Python hỗ trợ thêm 2 loại số nữa là Decimal và Fraction. Ta sẽ dùng hàm type để kiểm tra xem biến hoặc giá trị thuộc lớp số nào và hàm isinstance để kiểm tra xem chúng có thuộc về một class cụ thể nào không.

Số nguyên trong Python không bị giới hạn độ dài, số thập phân bị giới hạn đến 16 số sau dấu thập phân. Những con số chúng là làm việc hàng ngày thường là hệ số 10, nhưng lập trình viên máy tính thường là lập trình viên nhúng cần làm việc với hệ thống số nhị phân, thập lục phân và bát phân. Để biểu diễn những hệ số này trong Python, ta đặt một tiền tố thích hợp trước số đó.

Đây là ví dụ về việc sử dụng các tiền tố hệ số trong Python, và khi dùng hàm print để in giá trị của chúng ra màn hình, ta sẽ nhận được số tương ứng trong hệ số Kiểu dữ liệu chuỗi String trong Python là một trong các kiểu phổ biến nhất trong Python. Chuỗi ký tự trong python được bao quanh bởi dấu ngoặc kép đơn hoặc dấu ngoặc kép. Python coi các lệnh trích dẫn đơn và kép là như nhau. Việc gán một chuỗi cho một biến được thực hiện với tên biến theo sau là dấu bằng và chuỗi, Ví dụ:.

Bạn có thể gán một chuỗi nhiều dòng cho một biến bằng cách sử dụng 3 dấu ngoặc kép hoặc 3 dấu nháy đơn:. Tuy nhiên, Python không có kiểu dữ liệu ký tự, một ký tự đơn giản chỉ là một chuỗi có độ dài bằng 1. Dấu ngoặc vuông [] có thể được sử dụng để truy cập các phần tử của chuỗi. Ký tự đầu tiên có chỉ số là 0. Chỉ định chỉ mục bắt đầu và chỉ mục kết thúc, được phân tách bằng dấu hai chấm, để trả về một phần của chuỗi.

Python cung cấp một loạt các dữ liệu phức hợp, thường được gọi là các chuỗi sequence , sử dụng để nhóm các giá trị khác nhau. Đa năng nhất là danh sách list. Trong Python, list được biểu diễn bằng dãy các giá trị, được phân tách nhau bằng dấu phẩy, nằm trong dấu []. Các danh sách có thể chứa nhiều mục với kiểu khác nhau, nhưng thông thường là các mục có cùng kiểu. List không giới hạn số lượng mục, bạn có thể có nhiều kiểu dữ liệu khác nhau trong cùng một list, như chuỗi, số nguyên, số thập phân,….

Sử dụng toán tử index [] để truy cập vào một phần tử của list. Index bắt đầu từ 0, nên một list có 5 phần tử sẽ có index từ 0 đến 4. Truy cập vào phần tử có index khác index của list sẽ làm phát sinh lỗi IndexError.

Index phải là một số nguyên, không thể sử dụng float, hay kiểu dữ liệu khác, sẽ tạo lỗi TypeError. Python cho phép lập chỉ mục âm cho các chuỗi. Index -1 là phần tử cuối cùng, -2 là phần tử thứ 2 từ cuối cùng lên. Nói đơn giản là index âm dùng khi bạn đếm phần tử của chuỗi ngược từ cuối lên đầu.

Python cho phép truy cập vào một dải phần tử của list bằng cách sử dụng toán tử cắt lát : dấu hai chấm.

Giáo trình Tin học đại cương,Giới thiệu nội dung

WebBảng xếp hạng sàn forex uy tín, tốt nhất thế giới cho TraderViet. Top sàn giao dịch forex được cấp giấy phép bởi các cơ quan quản lý tài chính uy tín WebOption Compare Text: làm cho vbTextCompare trở thành đối số Compare mặc định. 1- hướng dẫn cơ bản về hàm String VBA 2. Option Compare Binary: Tạo vbBinaryCompare đối số Compare mặc định 2- hướng dẫn cơ bản về hàm String VBA Nếu Option Compare không được sử dụng thì mặc định là Web09/05/ · Địa chỉ: Tòa nhà M5 số 91 Nguyễn Chí Thanh, Đống Đa Hotline: Đà Nẵng. Địa chỉ: Tòa nhà Camelia – Ngô Quyền, Đà Nẵng Hotline: Hồ Chí Minh. Địa chỉ: Tòa nhà Sky Garden, Nguyễn Văn Linh, Tân Phong, Quận 7, blogger.com Hotline: Văn Phòng Tại Nhật Bản WebXu hướng tính dục là khái niệm chỉ sự hấp dẫn về tình cảm hoặc tình dục (hoặc cả hai) một cách lâu dài đối với những người thuộc giới tính khác, thuộc cùng giới tính, thuộc cả hai giới tính hoặc nhiều hơn một giới. Những sự hấp dẫn này thường được bao gồm những dạng là dị tính luyến ái WebInternet Of Things (IoT) – Internet vạn vật dường như đang đứng trước một bước ngoặt để đi đến giai đoạn tiếp theo cho một thế giới hiện đại, văn minh. Đó là viễn cảnh mà mọi vật đều có thể kết nối với nhau thông qua Internet không dây. Các doanh nghiệp đang có xu hướng ứng dụng sản phẩm công nghệ IoT WebBinary Option là thuật ngữ chỉ trò chơi “quyền chọn nhị phân”, Fibonacci là một chỉ báo trong phân tích kỹ thuật có nguồn gốc từ một lý thuyết toán học của Leonardo Fibonacci sống ở thế kỷ Các trader thường sử dụng fibonacci để vẽ các đường kháng cự hỗ trợ ... read more

Đối với con người, thông thường nữ giới sở hữu hai nhiễm sắc thể giới tính X, trong khi nam giới có một X và một Y. Ngoài ra, ESP còn hỗ trợ chế độ AP Access Point , tức là nó có thể khởi động một hoặc nhiều Access Point và cho phép các client khác có thể kết nối vào, hoặc chạy đồng thời cả chế độ STA và AP. Nếu sử dụng hệ 10 thì các linh kiện phải có 10 trang thái tương ứng với 10 chữ số như vậy sẽ rất khó khăn và phức tạp. Chào mọi người, mình là Thành. getTime , y: yTempVal } ; dataHumd. Lệnh xem và sửa ngày: DATE Current Date is Sat Enter new Date mm-dd-yy Lúc này có hai tuỳ chọn - Nếu không thay đổi ngày giờ gõ Enter - Nếu sửa ngày hiện hành ở dòng một thì sửa theo khuôn mẫu tháng -ngày-năm.

Các thư mục có thể đặt lồng trong nhau và tạo thành một cây thư mục. Bước 3 : Mở MQTT lens trên trình duyệt Chrome, tạo 1 connection với host name broker. Chúng là cơ sở dựa trên tập hợp của ngôn ngữ lập trình JavaScript, chỉ báo đảo chiều binary option. Thay đổi hướng trình bày WordArt Để thay đổi hướng trình bày WordArt, bạn sử dụng nút lệnh Text Direction trong nhóm lệnh WordArt Styles. Trên đây là toàn bộ thông tin về Fibonacci.

Categories: