Дистанционное управление игрушечным автомобилем с помощью Android Things GPIO. Часть 4

Создание HTTP-интерфейса Android Things
Как уже говорилось ранее, мы будем реализовывать интерфейс HTTP, чтобы можно было использовать его для удаленного управления машиной Android Things. Для реализации простого веб HTTP можем использовать NanoHTTPD, который является простым и легким HTTP-сервером. Для этого необходимо изменить файл build.gradle, добавив:
compile ‘org.nanohttpd: nanohttpd: 2.2.0 "

Теперь давайте создадим новый класс под названием RobotHTTPServer, который обрабатывает входящие HTTP-запросы:
public class RobotHttpServer extends NanoHTTPD {
 public RobotHttpServer (int port,
                        Context context,
                        CommandListener listener) {
        super (port)
        this.context = context;
        this.listener = listener;
        Log.d (TAG, «Starting Server»)
        try {
            start ();
        } Catch (IOException e) {
            e.printStackTrace ();
        }
    }

   @Override
    public Response serve (IHTTPSession session) {
        Map & amp; amp; amp; lt; String, String & amp; amp; amp; gt; params = session.getParms ();

        String control = params.get ( «control»)
        String action = params.get ( «btn»)

        Log.d (TAG, «Serve — Control [» + control + "] — Action [" + action + "]");

        if (action! = null & amp; amp; amp; amp; & amp; amp; amp; amp;! "». equals (action))
          listener.onCommand (action)

        return newFixedLengthResponse (readHTMLFile (). toString ());
    }

}
Страница HTML очень проста, и она состоит из 5 кнопок, отражающие четыре направления и кнопку остановки.
Мы добавим страницу HTML в assets / каталога. Последней частью является определение CommandListener, то есть функции обратного вызова, которая вызывается каждый раз, когда HTTP-сервер принимает команду:
public static interface CommandListener {
    public void onCommand (String command)
}
Сборник приложения Android Things для управления дистанционно управляемым автомобилем
Последний шаг — это все сложить и склеить эти классы, чтобы мы смогли наконец построить дистанционное управление автомобилем с помощью Android Things. Для этого необходимо создать MainActivity:
public class MainActivity extends Activity {

    private String TAG = getClass (). getName ();

    @Override
    protected void onCreate (Bundle savedInstanceState) {
        super.onCreate (savedInstanceState)
        setContentView (R.layout.activity_main)

        Log.d (TAG, «OnCreate …»);

        final MotorController mc = new MotorController ();
        RobotHttpServer server = new RobotHttpServer (8090, this,
                  new RobotHttpServer.CommandListener () {
            @Override
            public void onCommand (String command) {
                Log.d (TAG, «Command received [» + command + "]");
                if (command.equals ( «F»))
                    mc.forward ();
                else if (command.equals ( «B»))
                    mc.backward ();
                else if (command.equals ( «S»))
                    mc.stop ();
                else if (command.equals ( «L»))
                    mc.turnLeft ();
                else if (command.equals ( «R»))
                    mc.turnRight ();
            }
        });
    }
}
Как вы заметили, код очень прост, каждый раз, когда CommandListener получает новую команду, он вызывает метод класса, который обрабатывает двигатели, чтобы управлять ими.

Этот простой проект можно расширить. Мы могли бы добавить набор таких новых функций, как Vision, Machine learning и тому подобное. По этой причине мы использовали Android Things, а не Arduino или ESP8266.
Теперь вы знаете, как взаимодействовать с выводами Android Things GPIO и как их включить или выключить. Кроме того, вы научились пользоваться двигателями. Полученную вами информацию используйте для создания своей первой дистанционной машины Android Things.
Теперь вы можете играть со своей игрушкой!

Читайте также: