Chuyển tới nội dung
Home » App Inventor Wifi Arduino | Tạo Ứng Dụng Android Dùng Mit App Inventor

App Inventor Wifi Arduino | Tạo Ứng Dụng Android Dùng Mit App Inventor

How to Make a Simple App--[NodeMCU-ESP8266] -PART1

Tạo ứng dụng Android dùng MIT App Inventor

Bây giờ chúng ta sẽ tạo ra một ứng dụng Android bằng MIT App Inventor để điều khiển các thiết bị điện qua wifi theo các bước sau.

Đầu tiên bạn hãy truy cập vào website của MIT Application Inventor: http://ai2.appinventor.mit.edu/.

Sau khi nhấp vào “Create Apps!“ ở góc trên cùng bên trái, bạn tiến hành đăng nhập với tài khoản gmail của mình nhé.

Sau khi đăng nhập, bạn nhấp vào “Projects” trên màn hình tiếp theo và sau đó chọn “Start new project”.

Tiếp theo, bạn hãy đặt tên cho dự án.

Bây giờ bạn tiến hành thiết kế giao diện cho ứng dụng bằng cách chọn nhấp chọn nút “Designer” ở góc trên bên phải.

Trong màn hình thiết như hình bên dưới, bạn nhấp chọn và kéo các đối tượng (component) ở cột Palette vào trong màn hình thiết kế Viewer như hình bên dưới.

Các bạn lưu ý, cột Components cho thấy các đối tượng được sử dụng để thiết kế giao diện cho ứng dụng này. Bạn có thể thay đổi thuộc tính của các đối tượng trong cột Properties.

Sau khi thiết kế giao diện cho ứng dụng xong, bạn nhấp vào “Blocks” ở góc trên bên phải để lập trình cho ứng dụng của bạn.

Trong màn hình lập trình như hình bên dưới, bạn hãy nhấp vào các đối tượng tương ứng trên màn hình thiết kế rồi chọn và sắp xếp các khối như hình dưới đây.

Sau khi thiết kế giao diện và lập trình cho ứng dụng xong, chúng ta sẽ đóng gói ứng dụng ra file apk và cài vào điện thoại của mình. Để xuất ra được file apk các bạn chọn “Build” trên menu rồi chọn “App“. Có 2 cách để biên dịch và cài đặt ứng dụng vào điện thoại.

  • Cách 1: Sử dụng phần mềm MIT AI2 Companion. Với cách này, bạn cần cài đặt phần mềm MIT AI2 Companion trên điện thoại của mình.

  • Cách 2: Biên dịch ra file apk và cài đặt. Đầu tiên, bạn sẽ download file apk về máy tính (chọn save .apk to my computer), sau đó sao chép file này sang điện thoại để cài đặt.

Trong bài viết này tôi chọn Cách 1.

Để thực hiện, trong giao diện thiết kế của AI2, bạn chọn Build >> App (provide QR code for .apk)

Sau khi biên dịch xong sẽ xuất hiện một mã QR code, bạn sử dụng phần mềm MIT AI2 Companion để quét mã vạch QR, sau đó file apk sẽ tự động được tải về điện thoại. Cuối cùng, bạn cài đặt ứng dụng vào điện thoại của mình.

Bây giờ ứng dụng của bạn đã sẵn sàng. Nhưng để có thể điều khiển thiết bị điện qua wifi bằng điện thoại bạn cần thực hiện một bước cuối cùng sau đây.

Bây giờ chúng ta phải nạp chương trình cho NodeMCU để tạo một máy chủ web HTTP đơn giản để điều khiển thiết bị điện trong nhà. Chúng ta sẽ sử dụng phương thức HTTP GET để giao tiếp giữa các ứng dụng Android ESP8266 và Android.

Đọc thêm bài viết: Hướng dẫn lập trình ESP8266 NodeMCU dùng Arduino IDE

Tạo App Android bằng MIT APP INVENTOR

Để có thể tạo một App Android bằng MIT app inventor chúng truy cập vào link để tạo dự án nhé: http://appinventor.mit.edu

Bước đầu tiên các bạn Click vào Projects chọn “Start new project” để tạo một dự án mới.

Tiếp theo chúng ta cần đặt tên cho dự án.

Ở bên tay trái màn mình các bạn, chúng ta Click vào Button dùng để bật tắt thiết bị. Ở đây mình sẽ chọn 2 nút và đặt là “ON” và “OFF”.

Để có thể chỉnh sửa các thông số của Button các bạn Click vào và nó sẽ xổ ra các trường thông tin. Ở đây các bạn có thể đặt lại tên cho Button ở phần Text …

Tiếp theo, các bạn chọn mục Connectivity và cho Web và kéo thả vào Viewer nhé.

Sau khi đã cấu hình cho các Button và Web ta chọn vào Block để chuyển qua lập trình kéo thả Block.

Click vào “Button 1” chọn phần mà mình đã khoanh đỏ và kéo chúng vào vùng lập trình.

Tiếp tục, ta chọn “Web1” và kéo Block đã được đánh dấu. Ở phần này chúng ta sẽ cấu hình địa chỉ IP Web.

Chọn mục “Text” kéo block được khoanh đỏ vào vùng lập trình.

Tiếp theo ở mục Web1 chọn Block “Call Web.Get”.

Để biết được địa chỉ IP của NodeMCU ESP8266 ta cần nạp Code và bật Monitor lên xem nhé. Code mình để cuối bài viết các bạn tải về và

thực hiện nhé. Ở đây địa chỉ IP của mình là: 192.168.88.106

  • http://192.168.88.106/gpio/1
  • http://192.168.88.106/gpio/0

Các bạn kéo thả các Block lại với nhau giống như trên màn hình nhé.

Để có thể tải dự án về điện thoại, các bạn vào mục Build chọn App (project QR code for apk).

Quét mã QR code xuất hiện trên màn hình. Và các bạn tiến hành cài đặt App vào điện thoại nhé.

Như vậy là đã xong các bạn có thể điều khiển bật tắt thiết bị trên App điện thoại rồi.

How to Make a Simple App--[NodeMCU-ESP8266] -PART1
How to Make a Simple App–[NodeMCU-ESP8266] -PART1

/***********
Juan A. Villalpando
KIO4.COM
25/11/22
Version del módulo 9.2.4
Velocidad 9600
Carga el programa. Ve al Serial Monitor.
Escribe en un navegador 192.168.1.5
Pulsa los botones para encender o apagar el LED13 del Arduino.
***********/
#include

#define DEBUG true
SoftwareSerial esp8266(3,2);
// El TX del módulo al terminal 3 del Arduino.
// El RX del módulo al terminal 2 del Arduino.
void setup()
{
pinMode(13,OUTPUT);
Serial.begin(9600);
esp8266.begin(9600); // Importante la velocidad del módulo.
sendData(“AT+RST\r\n”,2000,DEBUG); // Borra la configuración que tenía el módulo
sendData(“AT+CWJAP=\”Nombre_de_tu_WiFi\”,\”Clave_de_tu_WiFi\”\r\n”, 2000, DEBUG);
delay(5000); // Espera un poco que conecte con el Router.
sendData(“AT+CWMODE=3\r\n”,1000,DEBUG); // Modo de cliente y servidor.
sendData(“AT+CIFSR\r\n”,1000,DEBUG); // En el Serial Monitor aparece la IP de cliente y servidor.
sendData(“AT+CIPMUX=1\r\n”,1000,DEBUG); // Multiples conexiones.
sendData(“AT+CIPSERVER=1,80\r\n”,1000,DEBUG); // El Puerto web es el 80
}
void loop(){
if(esp8266.available()) // Consulta si el módulo está enviando algún mensaje
{
if(esp8266.find(“+IPD,”))
{
delay(500);
int connectionId = esp8266.read()-48;
// Aquí las construcción de la PAGINA WEB.
String webpage = “HTTP/1.1 200 OK\r\n Content-Type: text/html\r\n\r\n\r\n”;
webpage += ”

KIO4.COM

“;
webpage += ”

“;
webpage += ”

“;
webpage += ”

“;
webpage += ”

\r\n\r\n”;
String cipSend = “AT+CIPSEND=”;
cipSend += connectionId;
cipSend += “,”;
cipSend +=webpage.length();
cipSend +=”\r\n”;
sendData(cipSend,500,DEBUG);
sendData(webpage,500,DEBUG);
// Lee el pin 13
int pin13 = digitalRead(13);
// Retorno de la lectura.
String retorno = “HTTP/1.1 200 OK\r\n Content-Type: text/html\r\n\r\n\r\n”;
if (pin13 == 1) {retorno += ” ON – Encendido”;}
if (pin13 == 0) {retorno += ” OFF – Apagado”;}
// ResponseCode App Inventor
cipSend = “AT+CIPSEND=”;
cipSend += connectionId;
cipSend += “,”;
cipSend += retorno.length();
cipSend +=”\r\n”;
sendData(cipSend,500,DEBUG);
sendData(retorno,500,DEBUG);
// Cierra la conexión
String closeCommand = “AT+CIPCLOSE=”;
closeCommand+=connectionId;
closeCommand+=”\r\n”;
sendData(closeCommand,500,DEBUG);
}
}
}
// Función para Enviar datos al Servidor.
String sendData(String command, const int timeout, boolean debug){
String response = “”;
esp8266.print(command); // Envía la información de command al servidor
long int time = millis();
while( (time+timeout) > millis())
{
while(esp8266.available())
{
// A response van los datos que regresan al servidor.
char c = esp8266.read(); // Va leyendo caracter a caracter.
response+=c;
// Consulta si en la información que regresa al servidor
// viene “GET /enci” o “GET /apag”
// Encenderá o apagará el LED13 del Arduino
if(response.indexOf(“GET /enci”) >0){
// Serial.print(“enciende”);
digitalWrite(13,HIGH);
}
if(response.indexOf(“GET /apag”) >0){
//Serial.print(“apaga”);
digitalWrite(13,LOW);
}
}
}
if(debug)
{
Serial.print(response);
}
return response;
}

// http://kio4.com/arduino/57modulowifi_2.htm
// Juan A. Villalpando
#include

SoftwareSerial esp8266(3,2);
// El TX del módulo al terminal 3 del Arduino.
// El RX del módulo al terminal 2 del Arduino.
int random_1 = 10;
int random_2 = 50;
String random_out = “0,0”;
String input_data = “”;
String fin = “”;
void setup(){
randomSeed(analogRead(A0));
Serial.begin(9600);
esp8266.begin(9600);
sendData(“AT+RST\r\n”,2000); // Borra la configuración que tenía el módulo
sendData(“AT+CWJAP=\”Nombre_de_tu_WiFi\”,\”Clave_de_tu_WiFi\”\r\n”, 2000);
delay(10000); // Espera un poco que conecte con el Router.
sendData(“AT+CWMODE=1\r\n”,1000); // Modo de cliente del Router.
sendData(“AT+CIFSR\r\n”,1000); // En el Serial Monitor aparece la IP del Servidor Web.
sendData(“AT+CIPMUX=1\r\n”,1000); // Multiples conexiones.
sendData(“AT+CIPSERVER=1,80\r\n”,1000); // Crea Servidor Web, puerto 80
}
void loop(){
if(esp8266.available()){
while(esp8266.available()){
char c = esp8266.read();
input_data += c;
if(input_data.indexOf(“genera”) > 0){
random_1 = random(10,50);
random_2 = random(50,99);
random_out = (String) random_1 + “,” + (String) random_2;
input_data = “”;
fin = “finalizado”;
}
}
}
// Return responseContent
if(fin == “finalizado”){
String header = “HTTP/1.1 200 OK\r\n Content-Type: text/html; \r\n”;
header += “Content-Length: “;
header += random_out.length();
header += “\r\nConnection: close\r\n\r\n”;
header += random_out;
sendData(“AT+CIPSEND=” + String(0) + “,” + header.length() + “\r\n”, 500);
sendData(header,1000);
// sendData (“AT+CIPCLOSE=” + String(0) + “\r\n”, 1000);
fin = “”;
}
}
// Envia datos al servidor y recibe la respuesta de los AT.
String sendData(String command, const int timeout){
String response = “”;
esp8266.print(command); // Envía la información de command al servidor
long int time = millis();
while( (time+timeout) > millis()){
while(esp8266.available()){
// A response van los datos que regresan al servidor.
char c = esp8266.read(); // Va leyendo caracter a caracter.
response+=c;
}
}
Serial.print(response);
return response; // Devuelve la respuesta del AT
}

It took me a while to figure out how the web server “knew” to work off IP address 192.168.1.9, but then I saw it in the COM24 log as the result of the AT+CIFSR command, and I imagine you read that output to get the IP address hard coded into the AI2 app.

Now we are going to carry out the previous example but we will create an Access Point (SoftAP – Soft Access Point), that is, the module will create a network independent from the Router, it will not be connected to the Router.

The code will create a network called ESP_81411C and the Web Server will have as IP: 192.168.4.1

For this we will change these lines…

void setup(){
randomSeed(analogRead(A0));
Serial.begin(9600);
esp8266.begin(9600);
sendData(“AT+RST\r\n”,2000); // Borra la configuración que tenía el módulo
// sendData(“AT+CWJAP=\”Nombre_de_tu_WiFi\”,\”Clave_de_tu_WiFi\”\r\n”, 2000);
// delay(10000); // Espera un poco que conecte con el Router.
sendData(“AT+CWMODE=2\r\n”,1000); // NOW IS A SOFT ACCESS POINT, MODE = 2
sendData(“AT+CIFSR\r\n”,1000); // En el Serial Monitor aparece la IP del Servidor Web. (192.168.4.1)
sendData(“AT+CIPMUX=1\r\n”,1000); // Multiples conexiones.
sendData(“AT+CIPSERVER=1,80\r\n”,1000); // Crea Servidor Web, puerto 80
}

We must change the IP in the code…

It is also convenient to install the application, since we are going to change the network and the MIT Companion will be in the Router’s network.

Once the application is installed, we go to the WiFi configuration and establish the ESP_81411C network

It is not necessary to put a Password since in this default configuration it does not have it.

If we wanted to change the name of the network and put a password on it, we would put this line:

3.- Remove the Serial Monitor, in case you have it open.

4.- We load this sketch in the IDE and upload it…

It is convenient from time to time to remove the power from the ESP8266 and put it back if it does not load well.

Summary

/*
* This sketch demonstrates how to set up a simple HTTP-like server.
* The server will set a GPIO pin depending on the request
* http://server_ip/gpio/0 will set the GPIO2 low,
* http://server_ip/gpio/1 will set the GPIO2 high
* server_ip is the IP address of the ESP8266 module, will be
* printed to Serial when the module is connected.
*/
#include

const char* ssid = “nombredemirouter”;
const char* password = “contraseñadelrouter”;
// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);
void setup() {
Serial.begin(9600);
delay(1500);
// prepare GPIO2
pinMode(2, OUTPUT);
digitalWrite(2, LOW);
// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print(“Connecting to “);
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(“.”);
}
Serial.println(“”);
Serial.println(“WiFi connected”);
// Start the server
server.begin();
Serial.println(“Server started”);
// Print the IP address
Serial.println(WiFi.localIP());
}
void loop() {
// Check if a client has connected
WiFiClient client = server.available();
if (!client) {
return;
}
// Wait until the client sends some data
Serial.println(“new client”);
while(!client.available()){
delay(1);
}
// Read the first line of the request
String req = client.readStringUntil(‘\r’);
Serial.println(req);
client.flush();
// Match the request
int val;
if (req.indexOf(“/gpio/0”) != -1)
val = 0;
else if (req.indexOf(“/gpio/1”) != -1)
val = 1;
else {
Serial.println(“invalid request”);
client.stop();
return;
}
// Set GPIO2 according to the request
digitalWrite(2, val);
client.flush();
// Prepare the response
String s = “HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n

\r\n

\r\nGPIO is now “;
s += (val)?”high”:”low”;
s += ”

\n”;
// Send the response to the client
client.print(s);
delay(1);
Serial.println(“Client disonnected”);
// The client will actually be disconnected
// when the function returns and ‘client’ object is detroyed
}

5.- When there is upload, remove the GPIO 0 to GND cable and open the Serial Monitor. Restart.

6.- Once the sketch is loaded we can remove the Arduino, connect an LED to the GPIO2 and feed the module with 3.3V

If you don’t have a 3.3V power supply, you can use the Arduino to power the module, note that you don’t need RX or TX.

Điều khiển thiết bị bằng MIT App Inventor sử dụng NodeMCU ESP8266

Trong nội dung bài viết hôm nay mình sẽ giới thiệu với các bạn một chủ đề mới cách có thể tạo một App Android trên MIT App Inventor một cách nhanh chóng mà không cần phải biết về lập trình nhiều.

Bài viết sẽ hướng dẫn các bạn cách tạo một App đơn giản và điều khiển các thiết bị trong gia đình thông qua NodeMCU ESP8266. Để có thể nắm rõ hơn các bạn có thể tìm đọc các bài viết liên quan đến dự án.

Sơ đồ đấu nối

Các linh kiện cần thiết cho dự án

Tên linh kiện Số lượng Shopee
NodeMCU ESP8266 Mua ngay
Dây cắm (Cái – Cái) Mua ngay
Module Relay 5V Mua ngay
MIT APP INVENTOR 2 -nodemcu wifi car control app
MIT APP INVENTOR 2 -nodemcu wifi car control app

Chuẩn bị linh kiện

Sau đây là danh sách các linh kiền cần thiết để thực hiện ứng dụng điều khiển thiết bị điện qua wifi bằng MIT App Inventor và NodeMCU ESP8266.

STT Tên linh kiện Số lượng
NodeMCU ESP8266
Module Relay 5V
Đèn điện
Dây điện

Module Relay

Relay hay rơ-le là một công tắc điện từ được vận hành bởi một dòng điện tương đối nhỏ có thể bật hoặc tắt một dòng điện lớn hơn nhiều. Relay được sử dụng để điều khiển mạch ngõ ra bằng một tín hiệu. Hay nói cách khác, chúng ta có thể sử dụng relay để chuyển mạch “ON” và “OFF” bằng điện. Relay được điều khiển bởi một dòng điện nhỏ và dòng điện ở ngõ ra lớn.

Đọc thêm bài viết: Hướng dẫn sử dụng relay

Khi có dòng điện chạy qua cuộn dây bên trong của relay và tạo ra một từ trường hút. Từ trường hút này tác động lên một đòn bẩy bên trong làm đóng hoặc mở các tiếp điểm điện và như thế sẽ làm thay đổi trạng thái của relay. Số tiếp điểm điện bị thay đổi có thể là 1 hoặc nhiều, tùy vào thiết kế.

Trên relay có 3 kí hiệu là: NO, NC và COM (xem hình bên dưới).

  • COM (Common): là chân chung, nó luôn được kết nối với 1 trong 2 chân còn lại. Còn việc nó kết nối chung với chân nào thì phụ thuộc vào trạng thái hoạt động của relay.
  • NC (Normally Close – Thường đóng): Khi relay ở trạng thái OFF, chân COM sẽ nối với chân này.
  • NO (Normally Open – Thường mở): Khi relay ở trạng thái ON (có dòng chạy qua cuộn dây) thì chân COM sẽ được nối với chân này.

Module relay bao gồm các linh kiện điện tử (transistor, điện trở, diode, …) được kết nối với nhau trên một board mạch và thực hiện một chức năng nhất định như hình bên dưới. Transistor được sử dụng để khuếch đại dòng điện, điện trở được sử dụng để phân cực cho transistor, và nếu transistor tắt, diode được sử dụng để bảo vệ transistor khi cuộn dây của relay xả năng lượng.

How To Build a WiFi Based Robot with Android Application Control | Android App with MIT App Inventor
How To Build a WiFi Based Robot with Android Application Control | Android App with MIT App Inventor

MIT App Inventor là gì?

MIT App Inventor là một trang web mã nguồn mở dành cho Android. Ban đầu nó được tạo ra bởi Google nhưng bây giờ được duy trì hoạt động bởi Học viện công nghệ Massachusetts MIT (Massachusetts Institute of Technology). Ngay cả một người mới bắt đầu sử dụng MIT App Inventor cũng có thể dễ dàng tạo ra cho mình các ứng dụng cho Android. MIT App Inventor sử dụng giao diện đồ họa GUI (Graphical User Interface) cho phép người dùng có thể kéo và thả các đối tượng trực quan để tạo các ứng dụng có thể dễ dàng chạy trên các thiết bị Android.

Sau khi hoàn tất việc thiết kế ứng dụng trên MIT app inventor, bạn có thể tải về ứng dụng đó và cài đặt ứng dụng đã thiết kế trên điện thoại thông minh của bạn. Cuối cùng, bạn tiến hành giao tiếp ứng dụng này với module wifi ESP8266 NodeMCU và điều khiển các thiết bị điện trong nhà qua điện thoại một cách nhanh chóng và tiện lợi.

Sơ đồ mạch kết nối điều khiển thiết bị điện qua wifi

Việc kết nối các linh trong mạch rất dễ dàng. Bạn có thể làm theo sơ đồ mạch dưới đây và bảng kết nối chân để lắp ráp mạch của bạn.

ESP8266 NodeMCU Relay
VCC VCC
GND GND
D4 Input

Bây giờ chúng ta phải tạo ra một ứng dụng Android bằng cách sử dụng MIT App Inventor để điều khiển các thiết bị gia dụng.

MQTT Android Application | MIT app inventor
MQTT Android Application | MIT app inventor

Giải thích chương trình

Dưới đây tôi giải thích ngắn gọn đoạn chương trình (code) trên để bạn có thể hiểu chương trình thực sự hoạt động như thế nào.

Tôi dùng lệnh include để chương trình tải thư viện có sẵn cho mô-đun ESP8166 WiFi và nhập thông tin đăng nhập WiFi như SSID và mật khẩu.

#include

const char* ssid = “ten-wifi”;

const char* password = “matkhau-wifi”;

Serial Monitor được khởi động ở tốc độ truyền mặc định cho NodeMCU

Serial.begin(115200);

Chân tín hiệu ngõ vào của Relay được kết nối với chân D4, tức là chân GPIO 2 của module NodeMCU.

pinMode(2, OUTPUT);

digitalWrite(2, 0);

Trong phần void setup, đoạn chương trình này nhằm mục đích kết nối với WiFi. Quá trình này được thực hiện theo vòng lặp, có nghĩa là chương trình chạy cho đến khi nào kết nối được với WiFi. Vì vậy, bạn cần nhập chính xác tên và mật khẩu wifi của bạn.

void setup() {

Serial.println();

Serial.println();

Serial.print(“Connecting to “);

Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(“.”);

Serial.println(“”);

Serial.println(“WiFi connected”);

Trong phần void loop, chương trình sẽ kiểm tra xem client đã kết nối chưa. Nó chờ cho đến khi client gửi dữ liệu và thực hiện các tác vụ theo đầu vào.

void loop() {

WiFiClient client = server.available();

if (!client) {

return;

Serial.println(“new client”);

while (!client.available()) {

delay(1);

Bạn có thể kiểm tra web server của bạn có hoạt động hay chưa bằng cách sử dụng các URL sau để BẬT hoặc TẮT đèn điện.

Lưu ý: 192.168.x.xxx là địa chỉ IP của NodeMCU. Bạn có thể tìm thấy địa chỉ IP này trên Serial Monitor. Khi bạn chạy chương trình trên Arduino IDE, chương trình sẽ in địa chỉ IP của thiết bị trên Serial Monitor. Đồng thời, nó sẽ xác nhận xem web server có hoạt động hay không.

Code

#include

const char* ssid = “Phamson”; const char* password = “phamtheson”; WiFiServer server(80); void setup() { Serial.begin(115200); //Default Baud Rate for NodeMCU delay(10); pinMode(2, OUTPUT); // Connect Relay to NodeMCU’s D4 Pin digitalWrite(2, 0); // Connect to WiFi network Serial.println(); Serial.println(); Serial.print(“Connecting to “); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print(“.”); } Serial.println(“”); Serial.println(“WiFi connected”); // Start the server server.begin(); Serial.println(“Server started”); // Print the IP address Serial.println(WiFi.localIP()); } void loop() { // Check if a client has connected WiFiClient client = server.available(); if (!client) { return; } // Wait until the client sends some data Serial.println(“new client”); while(!client.available()){ delay(1); } String req = client.readStringUntil(‘\r’); Serial.println(req); client.flush(); int val; if (req.indexOf(“/gpio/0”) != -1) val = 0; else if (req.indexOf(“/gpio/1”) != -1) val = 1; else { Serial.println(“invalid request”); client.stop(); return; } // Set GPIO2 according to the request digitalWrite(2, val); client.flush(); String s = “HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n

\r\n

\r\nGPIO is now “; s += (val)?”high”:”low”; s += ”

“; }

Hey guys, I need to create an app by app inventor. It should be able to receive strings from Arduino via ESP8266.
I need an app inventor extension of the WiFi module.
I have seen so many module of Bluetooth or wifi module that can only send messages to Arduino.

So I need an extension that can receive data from Arduino via WiFi module.
Any idea? Thank you very much!

My extension works with TCP/IP. I can’t tell if it works with your WIFI card.
If you are going to connect to the Arduino from time to time, and use your phone for other tasks as well, then I think it’s better to let the Arduino be the server and your phone be a client. Then use polling as suggested before. This will be easier to implement.

Dear @Junrong_Huang,
I’m struggling since a couple of days with a problem similar to yours.
Behind the scene: => I wanted to make something like a home automation/antitheft system on my own.
I have then bought 3 NODEMCU8266 and some PIR sensors (Arduino compatibles).
The aim is to have a PAD (or phone) with an AI2 application to behave as the “controller” of the various NODEMCU’s in a totally local WiFi network, without any router (therefore no remote control via WEB).
.I’ve then decided to have a structure like:
1 NODEMCU (#1) acting as a soft Access Point in Server configuration. It acquires the PIR and drives two relays (when it receives the command by each of the other two NODEMCU’s).
2 NODEMCU’s (#2 and #3) acting as Stations (STA) in Client configuration, Every 5 seconds they send a relay ON/OFF request to the AP, just to see whether they are alive and connected.
1 PAD (Lenovo M8 Android 9) in Client configuration, acting as User Interface or Controller. It can send a relay ON/OFF command by hitting on two buttons (of the PAD screen). On the screen are also shown the HTML strings as they come from the AP. No extensions used, just blocks.
With my configuration, in which the PAD (phone) is a client, I found that the “easy” way to receive messages from the server, is to set a periodical clock (i.e. 250 ms) on the PAD, so the PAD can ask the server if there are any news (like it was sent unsolicited by the server: see [(@rkl099) Rolf’s answer].
In other words, by means of a 250 ms clock, the PAD (phone) asks the server to respond with some updates. If the server has some news to transmit to the client, it sends this new information, else, it sends the string “nothing to say”. As soon as the string is received by the PAD, the app parses it, and decides consequently (i.e. “nothing to say” = no actions ).
The .aia and the .ino files that you find attached are really far from being “ready to use” but, anyway, they are working in my configuration, as described above and I guess they can be a good base that you can elaborate to get your needs Auto_Home_04 _1.aia (103.0 KB) ESP_8266_base.ino (8.1 KB)

EDIT: removed yesterday’s Client .ino. Replaced with a commented one:

I know you are at the experimental stage but it is best to not have any unused cables near the Arduino and no cables should be near the module other than the ones connected to it. ESP-01S ESP8266 Module should work just fine, make sure it’s in good condition -check for hairline cracks with a magnifying glass and test the cabling for continuity. Need to be sure you start with a good base

I saw several projects that integrate APP Inventor with Arduino,
unfortunately I only found projects where data from arduino sensors
are replicated on the mobile screen or actuators are turned on or off.

Would anyone know of an example where the mobile APP can pass a value
to an Arduino variable?

For example, turning on a lamp if the level of the photoresistor is
less than x, and the value of x is can be changed on the application
screen (typing the value or using a slider, etc.)

If you would like to have full control over ESP, send and read data. Also be able to control ESP remotely, e.g. from work, read about the MQTT protocol. There is a nice MQTT extension for appinvwntor and lots of libraries for arduino. There are also many free mqtt brokers (servers) available. You can also create your own server, e.g. using the android application. This way you can also control esp from e.g. the google assistant.

Here is English translated Wifi Led control project, But I am still trying to write correct code for Nodemcu
Also I will have to findout How to upload LEDWifi_ESP_BIJ_1Aia Project file here for community

I want to send temperature sensor data whenever a button named get temperature is pressed on app it should display the current temperature value. I am able to see new client request whenever I click the button and also Arduino serial print but it does not appear on the app text box… Please help

Welcome,

Most of the devices does not have the temperature sensor. See the documentation.

A sensor component that can measure the ambient (external) temperature. Most Android devices do not have this sensor.

They’re using an Arduino Temperature Sensor

Oh, I thought it is an Android sensor

This may help you:

Thanks @NishyanthKumarbut i m using Wifi instead of bluetooth … Here is the sample blocks which i want to use please ignore the cross marks as this is just an example. What i want to do is there is a button on my app which is getTemp when i press that button it sends new client request to esp8266 and whatever output in the form of text i get on serial monitor of arduino should get updated on the text box (temp) located just above the button.ill also provide sample arduino code here i have given constant temp example but it is a variable in my case and its changing

#include

const char* ssid = “JioFi2_C4FFC1”;const char* password = “######”;WiFiServer server(80);

void setup() {Serial.begin(38400);


Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(100); //500 Serial.print("."); } Serial.println(""); Serial.println("Wifi Connected"); Serial.println("Server started "); Serial.println(WiFi.localIP());

server.begin();

}void loop() {string temp=38*cWiFiClient client = server.available();if (!client){return;}Serial.println(“new client”);while(!client.available()){delay(1);}String req = client.readStringUntil(‘\r’);Serial.println(req);


if (req.indexOf("/getTemp")!=-1) { client.println(temp); Serial.println(temp); } String web = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"; client.print(web); client.flush();

Ah, sorry. Didn’t see that.I’m not the best at Arduino (I don’t know C++), but @Juan_Antonio and @NissanCedric are the go-to people to ask in its terms inside of this Community.

Check

Thanks @Juan_AntonioI have already gone through these two links but the problem with in my case is that I want to receive the text that obtained on serial monitor of Arduino but these 2 examples will send data from to esp device do I need to make any change in Arduino code or in app blocks to receive text from esp device to app using wifi.. … Please help

Here many examples with ESP32

Check your phone to see if its web browser can reach that 192.168… address.

You may need to switch from your cell service’s net access to local WiFi access to get there.

thanks for your support @Juan_Antonio I tried your example of analog read from potentiometer… but in my case it displays “Error1101: unable to connect to specific URL http://192.168.1.184/temp”i made the same program as like yours but to get temperature data in form of stringthe only difference here is :this is from your code-if (req.indexOf(“consulta”) != -1){valor = analogRead(Ent_Anilogica);valor_map = map(valor, 0, 4095, 0, 330);Serial.println(valor);}

this is from my code-if (req.indexOf(“/getTemp”)!=-1){client.println(temp);Serial.println(temp);}

I can’t understand why its not working please help.

@Sneha_JangidTry

if(req.indexOf(“getTemp”)!=-1)

@Juan_Antonio did but same error

@ABG checked but not working

#include

const char* ssid = “XXXXXXX”;const char* password = “XXXXXXXXXXXX”;

String temperature = “34”;

WiFiServer server(80);

void setup() {Serial.begin(115200);

// Conecta a la red wifi.Serial.println();Serial.print(“Conectando con “);Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print(“.”);}Serial.println(“Conectado con WiFi.”);

// Inicio del Servidor web.server.begin();Serial.println(“Servidor web iniciado.”);

// Esta es la IPSerial.print(“Esta es la IP para conectar: “);Serial.print(“http://”);Serial.print(WiFi.localIP());}

void loop() {// Consulta si se ha conectado algún cliente.WiFiClient client = server.available();if (!client) {return;}

Serial.print(“Nuevo cliente: “);Serial.println(client.remoteIP());

// Espera hasta que el cliente envíe datos.while(!client.available()){ delay(1); }

/////////////////////////////////////////////////////// Lee la información enviada por el cliente.String req = client.readStringUntil(‘\r’);Serial.println(req);

// Realiza la petición del cliente.if (req.indexOf(“consulta”) != -1){temperature = String(random(1,100));Serial.println(temperature);delay(10);}

//////////////////////////////////////////////// Página WEB. ////////////////////////////client.println(“HTTP/1.1 200 OK”);client.println(“Content-Type: text/html”);client.println(“”); // Importante.

client.println(temperature);

Serial.print(“Cliente desconectado: “);Serial.println(client.remoteIP());// client.flush();}

Here with a potentiometer:http://kio4.com/arduino/347B_esp8266_AI2_Potenciometro.htm

@Sneha_Jangid did it work ?

Hiện nay, nhà thông minh đang ngày càng trở nên phổ biến. Việc tạo ra các thiết bị IoT là cách tốt nhất để giúp cho căn nhà của bạn được tiện nghi hơn. Nó cho phép chúng ta điều khiển các thiết bị gia dụng, khóa cửa, máy móc bằng điện thoại thông minh hoặc máy chủ web. Ở bài viết này, tôi sẽ hướng dẫn các bạn tạo ra một ứng dụng nhỏ để điều khiển thiết bị điện qua wifi bằng cách sử dụng một ứng dụng Android được tạo ra từ MIT App Inventor.

Xem thêm bài viết: Điều khiển LED qua bluetooth dùng App Inventor và Arduino

How to Build an Android App to Control Your WiFi Enabled Arduino
How to Build an Android App to Control Your WiFi Enabled Arduino

Chương trình

#include

const char* ssid = “ten-wifi”;

const char* password = “matkhau-wifi”;

WiFiServer server(80);

void setup() {

Serial.begin(115200);

delay(10);

pinMode(2, OUTPUT);

digitalWrite(2, 0);

Serial.println();

Serial.println();

Serial.print(“Connecting to “);

Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(“.”);

Serial.println(“”);

Serial.println(“WiFi connected”);

server.begin();

Serial.println(“Server started”);

Serial.println(WiFi.localIP());

void loop() {

WiFiClient client = server.available();

if (!client) {

return;

Serial.println(“new client”);

while (!client.available()) {

delay(1);

String req = client.readStringUntil(‘\r’);

Serial.println(req);

client.flush();

int val;

if (req.indexOf(“/gpio/0”) != -1)

val = 0;

else if (req.indexOf(“/gpio/1”) != -1)

val = 1;

else {

Serial.println(“invalid request”);

client.stop();

return;

digitalWrite(2, val);

client.flush();

String s = “HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n

\r\n

\r\nGPIO is now “;

s += (val) ? “high” : “low”;

s += “”;

Keywords searched by users: app inventor wifi arduino

Receiving Data From Mcu (Esp8266) And Displaying On App Over Local Network  Wifi - Mit App Inventor Help - Mit App Inventor Community
Receiving Data From Mcu (Esp8266) And Displaying On App Over Local Network Wifi – Mit App Inventor Help – Mit App Inventor Community
Home Automation With Mit App Inventor And Esp8266 - Iot Projects Ideas
Home Automation With Mit App Inventor And Esp8266 – Iot Projects Ideas
Mai And Esp8266 Coupled To Arduino Ide - Mit App Inventor Help - Mit App  Inventor Community
Mai And Esp8266 Coupled To Arduino Ide – Mit App Inventor Help – Mit App Inventor Community
Mit App Inventor 2 Meets Esp8266! #Kidserie-03 - Youtube
Mit App Inventor 2 Meets Esp8266! #Kidserie-03 – Youtube
Send Text From Arduino To Mit App Using Esp8266 Wifi - Mit App Inventor  Help - Mit App Inventor Community
Send Text From Arduino To Mit App Using Esp8266 Wifi – Mit App Inventor Help – Mit App Inventor Community
Esp32 + Mit App Inventor Mini-Project Demo! | Diy Wi-Fi Rgb Led Contoller -  Part 1 - Youtube
Esp32 + Mit App Inventor Mini-Project Demo! | Diy Wi-Fi Rgb Led Contoller – Part 1 – Youtube
Receiving Data From Mcu (Esp8266) And Displaying On App Over Local Network  Wifi - Mit App Inventor Help - Mit App Inventor Community
Receiving Data From Mcu (Esp8266) And Displaying On App Over Local Network Wifi – Mit App Inventor Help – Mit App Inventor Community
Arduino + Esp8266 Remote Control Led Using An Android App With Camera Live  View | Petestechprojects
Arduino + Esp8266 Remote Control Led Using An Android App With Camera Live View | Petestechprojects
Using Esp8266 And Mit App Inventor To Control A Relay | Iot | Iot, Inventor,  Relay
Using Esp8266 And Mit App Inventor To Control A Relay | Iot | Iot, Inventor, Relay
Control An Led From A Mobile App Using Access Point Mode (Ap). - Youtube
Control An Led From A Mobile App Using Access Point Mode (Ap). – Youtube
App Inventor Sends Information To Esp8266 By Wifi - Tutorials And Guides - Mit  App Inventor Community
App Inventor Sends Information To Esp8266 By Wifi – Tutorials And Guides – Mit App Inventor Community
I Need Your A Help [App Inventor 2 Receive Data From Arduino Via  Bluetooth(Hm-10)] - Mit App Inventor Help - Mit App Inventor Community
I Need Your A Help [App Inventor 2 Receive Data From Arduino Via Bluetooth(Hm-10)] – Mit App Inventor Help – Mit App Inventor Community
Arduino + Esp8266 Remote Control Led Using An Android App With Camera Live  View | Petestechprojects
Arduino + Esp8266 Remote Control Led Using An Android App With Camera Live View | Petestechprojects
Mit App Inventor 2 -Nodemcu Wifi Car Control App - Youtube
Mit App Inventor 2 -Nodemcu Wifi Car Control App – Youtube
Điều Khiển Thiết Bị Bằng Mit App Inventor Sử Dụng Nodemcu Esp8266 | Arduino  Kit
Điều Khiển Thiết Bị Bằng Mit App Inventor Sử Dụng Nodemcu Esp8266 | Arduino Kit
Using Esp8266 And Mit App Inventor To Control A Relay | Iot | Relay, App,  Iot
Using Esp8266 And Mit App Inventor To Control A Relay | Iot | Relay, App, Iot
How To Build Custom Android App For Your Arduino Project Using Mit App  Inventor - How To Mechatronics
How To Build Custom Android App For Your Arduino Project Using Mit App Inventor – How To Mechatronics
Smartphone Controlled Lamp | Arduino + Mit App Inventor - Hackster.Io
Smartphone Controlled Lamp | Arduino + Mit App Inventor – Hackster.Io

See more here: kientrucannam.vn

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *