内容介绍
内容介绍
一,项目介绍
本项目主要使用了Wio-terminal板卡和ESP8266开发板两块开发板,其中Wio-terminal作为HTTP通信中的客户端,ESP8266作为服务器端,接收来自Wio-terminal的控制信号,从而实现无线遥控,下面来介绍一下这两个板卡。
1.Wio-terminal
看看他帅气的外观和官方介绍(官方链接),这次项目中主要用到了WIFI模块,五项按键,LCD屏幕。
Wio Terminal 是基于SAMD51的微控制器,具有 Realtek RTL8720DN 支持的无线连接,与Arduino和MicroPython兼容。它的运行速度为 120MHz (最高可达200MHz), 4MB 外部闪存和 192KB RAM。它同时支持蓝牙和Wi-Fi,为物联网项目提供了骨架。Wio Terminal自身配有 a 2.4” LCD屏幕, 板载IMU(LIS3DHTR),麦克风,蜂鸣器,microSD卡槽,光传感器和红外发射器(IR 940nm)。 最重要的是它还有两个用于Grove生态系统的多功能Grove端口和40个Raspberry pi兼容的GPIO引脚,用于支持更多附加组件。
2.ESP8266WIFI开发板。
二,程序框架
三,程序介绍
本项目主要分为客户端和服务端,先介绍一下客户端(WIO-termianl)程序
#include <rpcWiFi.h>
#include <TFT_eSPI.h>
#include <SPI.h>
#define black TFT_BLACK //定义颜色
#define white TFT_WHITE
#define red TFT_RED
TFT_eSPI tft = TFT_eSPI(); //将屏幕对象化
const char* ssid = "8888"; //设置WiFi网络
const char* password = "12345789";
const int httpport = 80; //设置网络端口
const char* host = "192.168.204.4"; //设置连接IP地址
int Flag; //定义电机状态标识
void setup()
{
Serial.begin(9600);
tft.init();
tft.fillScreen(TFT_WHITE);
tft.setTextColor(TFT_RED);
tft.setTextSize(3);
tft.setRotation(3); //屏幕初始化,设置屏幕背景为白色,字体颜色为红色,字体大小为三号,屏幕方向为3号
int i;
for (i = 1; i <= 8; i++) {
tft.drawFastHLine(0, i * 40, 320, black);
}
tft.drawString("Hello! Remote", 0, 19); //绘制六条水平线
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(250);
Serial.print(". ");
} //连接WiFi
tft.drawString("WiFi SSID:", 0, 59);
tft.drawString(ssid, 200, 59);
tft.drawString("Connected IP:", 0, 99);
tft.drawString(host, 0, 139);
button_init(); //按键初始化
}
void loop() {
tft.setTextColor(red);
if (digitalRead(WIO_5S_UP) == LOW) {
tft.fillRect(0,181,320,19,white);
tft.drawString("UP",0,179);
Flag = 1;
}
else if (digitalRead(WIO_5S_DOWN) == LOW) {
tft.fillRect(0,181,320,19,white);
tft.drawString("DOWN", 0,179);
Flag = 2;
}
else if (digitalRead(WIO_5S_LEFT) == LOW) {
tft.fillRect(0,181,320,19,white);
tft.drawString("LEFT", 0,179);
Flag = 3;
}
else if (digitalRead(WIO_5S_RIGHT) == LOW) {
tft.fillRect(0,181,320,19,white);
tft.drawString("RIGHT", 0,179);
Flag = 4;
}
else if (digitalRead(WIO_5S_PRESS) == LOW) {
tft.fillRect(0,181,320,19,white);
tft.drawString("PRESS", 0,179);
Flag = 5;
} //检测按键,显示状态
WiFiClient client; //初始化WiFi网络,建立客户端对象
Serial.println("Connect to...");
Serial.print(host);
String url = "/update?flag=" + String(Flag);
String httpRequest = String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n" +
"\r\n"; //HTTP请求
Serial.print("\r\n");
if (client.connect(host, 80)) {
Serial.println(" Success");
client.print(httpRequest); //发送http请求
Serial.println("Sending request: ");
Serial.println(httpRequest);
}
else {
Serial.println(" failed");
}
delay(1000);
}
void button_init()
{
pinMode(WIO_KEY_A, INPUT_PULLUP);
pinMode(WIO_KEY_B, INPUT_PULLUP);
pinMode(WIO_KEY_C, INPUT_PULLUP);
pinMode(WIO_5S_UP, INPUT_PULLUP);
pinMode(WIO_5S_DOWN, INPUT_PULLUP);
pinMode(WIO_5S_LEFT, INPUT_PULLUP);
pinMode(WIO_5S_RIGHT, INPUT_PULLUP);
pinMode(WIO_5S_PRESS, INPUT_PULLUP);
}
显示效果
服务端程序
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
ESP8266WebServer ESPServer(80); //实例化网页服务
const char* ssid = "8888";
const char* password = "12345789";
IPAddress local_IP(192, 168, 68, 4); //配置网络参数
IPAddress gateway(192, 168, 68, 64); //静态IP地址
IPAddress subnet(255, 255, 255, 0);
IPAddress dns(8, 8, 8, 8);
const int M1A = 5;
const int M1B = 4;
const int M2A = 0;
const int M2B = 2;
const int M3A = 14;
const int M3B = 12;
const int M4A = 13;
const int M4B = 15;
void setup() {
Serial.begin(9600);
if (!WiFi.config(local_IP, gateway, subnet)) {
Serial.println("Failed to config");
}
Serial.println("WiFi connect...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(". ");
}
pinMode(M1A, OUTPUT);
pinMode(M1B, OUTPUT);
pinMode(M2A, OUTPUT);
pinMode(M2B, OUTPUT);
pinMode(M3A, OUTPUT);
pinMode(M3B, OUTPUT);
pinMode(M4A, OUTPUT);
pinMode(M4B, OUTPUT);
Serial.println("WiFi ssid: ");
Serial.println(WiFi.SSID());
Serial.println("WiFi IP: ");
Serial.println(WiFi.localIP());
ESPServer.on("/update", handleInfo);
ESPServer.begin();
Serial.println("ESPServer Started");
}
void loop() {
ESPServer.handleClient();
}
void handleInfo() {
int flag = ESPServer.arg("flag").toInt();
ESPServer.send(200, "text/plain", "Received");
switch (flag) {
case 1:
UP();
break;
case 2:
DOWN();
break;
case 3:
STOP();
break;
}
delay(200);
Serial.print("direction: ");
switch (flag) {
case 1:
Serial.println("UP");
break;
case 2:
Serial.println("DOWN");
break;
case 3:
Serial.println("LEFT");
break;
case 4:
Serial.println("RIGHT");
break;
}
Serial.println("===============================");
delay(100);
}
void UP() {
digitalWrite(M1A, HIGH);
digitalWrite(M1B, LOW);
digitalWrite(M2A, HIGH);
digitalWrite(M2B, LOW);
digitalWrite(M3A, HIGH);
digitalWrite(M3B, LOW);
digitalWrite(M4A, HIGH);
digitalWrite(M4B, LOW);
}
void DOWN() {
digitalWrite(M1A, LOW);
digitalWrite(M1B, HIGH);
digitalWrite(M2A, LOW);
digitalWrite(M2B, HIGH);
digitalWrite(M3A, LOW);
digitalWrite(M3B, HIGH);
digitalWrite(M4A, LOW);
digitalWrite(M4B, HIGH);
}
void STOP() {
digitalWrite(M1A, LOW);
digitalWrite(M1B, LOW);
digitalWrite(M2A, LOW);
digitalWrite(M2B, LOW);
digitalWrite(M3A, LOW);
digitalWrite(M3B, LOW);
digitalWrite(M4A, LOW);
digitalWrite(M4B, LOW);
}
通过Wio-terminal的五项摇杆按键来控制与ESP8266相连的两个电机。
五,小结
由于疫情和开学原因,没有小车模型,只能控制两个电机意思一下,后续还有可能使用IMU传感器实现重力控制。
最后,感谢硬禾学堂提供的这次机会。
附件下载
Car.ino
IP地址配置要根据自身WIfi网络配置,WiFi配置需自定义
Wio____.ino
团队介绍
个人
评论
0 / 100
查看更多
猜你喜欢
基于AVR64DD32和ESP32-E的蓝牙小车控制系统(Funpack2-4)本文使用AVR64DD32 Curiosity Nano开发板和 FireBeetle ESP32-E开发板,设计开发了一套蓝牙小车控制系统。该系统主要包括遥控和车体两部分,通过操作遥控手柄,可实现四驱车的前进、后退、转向、停止等功能。
chinaking
730
FastBond2阶段1基于AT89C51单片机设计的智能风扇通过使用AT89C51主控芯片和L298N驱动模块,成功地设计了一款智能风扇系统。该系统支持红外线NEC协议接收遥控器发送的控制指令,实现了风扇的开关、调速和定时切换功能。
An_ting_ling
453
Funpack3-4:基于MCXN947与Lwip的http简易httpd服务器该项目使用了Lwip开源协议栈,实现了一个NXP MCXN947为核心的HTTPD网页服务器的设计,它的主要功能为:可以使用任意浏览器访问MCXN947创建的HTTPD服务器,并能够控制板载LED灯,也可以动态获取按键,i3c温度传感器p3t1755以及板载TouchPad "E1"的触摸状态。
littlestudent
29