奥多摩から記事を書いています。
Tello
DJIとIntelのトイドローン。
最近流行ってたので触ってみました。
出来たもの
NefryBTからTelloに命令を送って離陸させて着陸させます。
コード
そんなに依存コードが無くてシンプル。
TelloとNefryBTはWiFiで接続してUDPでコマンドを送ってる感じです。
tello.ino
#include <WiFiUDP.h>
const char* TELLO_IP = "192.168.10.1";
const int PORT = 8889;
WiFiUDP Udp;
char packetBuffer[255];
String message = "";
void setup() {
Serial.begin(115200);
Serial.println("start");
Udp.begin(PORT);
sendMessage("command");
message = listenMessage();
Serial.println(":command");
Serial.println(message);
delay(1000);
//離陸
sendMessage("takeoff");
Serial.println(":takeoff");
message = listenMessage();
Serial.println(message);
delay(5000);
//着陸
sendMessage("land");
Serial.println(":land");
message = listenMessage();
Serial.println(message);
}
void loop() {}
//Telloからのレスポンスを確認する関数
String listenMessage() {
int packetSize = Udp.parsePacket();
if (packetSize) {
Serial.print("Received packet of size ");
Serial.println(packetSize);
Serial.print("From ");
IPAddress remoteIp = Udp.remoteIP();
Serial.print(remoteIp);
Serial.print(", port ");
Serial.println(Udp.remotePort());
// read the packet into packetBufffer
int len = Udp.read(packetBuffer, 255);
if (len > 0) {
packetBuffer[len] = 0;
}
Serial.println("Contents:");
Serial.println(packetBuffer);
}
// this only works as tello's API doesn't return responses greater than 255 char
return (char*) packetBuffer;
}
//UDPでTelloに命令を送る関数
void sendMessage(char* ReplyBuffer) {
Udp.beginPacket(TELLO_IP, PORT);
Udp.printf(ReplyBuffer);
Udp.endPacket();
}
参考
この辺のコードが参考になりました。
* https://github.com/Tzyinc/arduinoTello/blob/master/telloflyer.ino
* https://github.com/espressif/arduino-esp32/blob/master/libraries/WiFi/examples/WiFiUDPClient/WiFiUDPClient.ino
所感
TelloってParrotのローリングスパイダーなどと同じ挙動をするけど関係ないのかな?