前回タッチ操作を含めたGUIアプリケーションを開発する環境を整えてみたので実用的なアプリケーションの開発を行いました.
ソフトウェアキーボードによってテキストを入力しその時点の位置情報を含めて送信するアプリケーションです.WP7605にはGPSの受信機も搭載されているので使用します.
ソースコード全体はhttps://github.com/e-trees/wp7605prjにアップロードしてあります.
開発にあたり
GUIアプリケーションの開発自体はライブラリの恩恵を受けることができるので大きな問題はありません.GUIは50行程度で構成されています.複雑なコードはなく親のオブジェクトを指定し生成をした後スタイルを設定する流れです.
static void makeScreen(void)
{
lv_coord_t width = lv_disp_get_hor_res(lv_disp_get_default());
lv_coord_t height = lv_disp_get_ver_res(lv_disp_get_default());
// Container
lv_obj_t *cont = lv_obj_create(lv_scr_act());
static lv_style_t style;
lv_style_init(&style);
lv_style_set_flex_flow(&style, LV_FLEX_FLOW_ROW_WRAP);
lv_style_set_flex_main_place(&style, LV_FLEX_ALIGN_SPACE_EVENLY);
lv_style_set_layout(&style, LV_LAYOUT_FLEX);
lv_obj_set_size(cont, width, LV_SIZE_CONTENT);
lv_obj_center(cont);
lv_obj_set_align(cont, LV_ALIGN_TOP_MID);
lv_obj_add_style(cont, &style, 0);
// Title Label
static lv_style_t style_title;
lv_obj_t *label_title;
label_title = lv_label_create(cont);
lv_style_init(&style_title);
lv_style_set_text_font(&style_title, &lv_font_montserrat_20);
lv_obj_add_style(label_title, &style_title, 0);
lv_label_set_text(label_title, "Logging with GPS");
// Send Button
lv_obj_t *btn = lv_btn_create(cont);
lv_obj_set_size(btn, 60, LV_SIZE_CONTENT);
lv_obj_add_event_cb(btn, sendbtn_event_cb, LV_EVENT_ALL, NULL);
lv_obj_t *label = lv_label_create(btn);
lv_label_set_text(label, "Send");
lv_obj_center(label);
// Textarea & Keyboard
/*Create a text area. The keyboard will write here*/
ta = lv_textarea_create(cont);
/*Create a keyboard to use it with an of the text areas*/
lv_obj_t *kb = lv_keyboard_create(lv_scr_act());
lv_obj_align(ta, LV_ALIGN_TOP_MID, 0, 10);
lv_obj_add_event_cb(ta, ta_event_cb, LV_EVENT_ALL, kb);
lv_obj_set_size(ta, width * 0.8, height / 4);
lv_keyboard_set_textarea(kb, ta);
// GPS Label
label_gps = lv_label_create(cont);
lv_style_init(&style_title);
lv_style_set_text_font(&style_title, &lv_font_montserrat_12);
lv_obj_add_style(label_gps, &style_title, 0);
lv_label_set_text(label_gps, "Lat:x Lon:x");
}
WP7605のGPS受信に戸惑いましたが以下のスレッドを参考に位置情報取得ができました./dev/ttyAT
からATコマンドを送信することで設定及び取得できます.
動かしてみた
クロスコンパイルによるビルドなので設定コマンドを実行した上で make
します.
$ . /opt/swi/SWI9X07Y_02.28.03.05/environment-setup-armv7a-neon-poky-linux-gnueabi
$ cd ~/workspace
$ git clone https://github.com/e-trees/wp7605prj.git
$ cd wp7605prj/logwitloc
$ make
$ scp demo root@192.168.2.2
後はWP7605上で実行します.
今回はデータを送信するので事前にセルラ回線に接続しておきます.その後タッチパネルの初期化を行い実行します.引数にデータの送信先URLを渡し実行します.
$ cm data connect &
$ insmod /lib/modules/3.18.131/kernel/drivers/input/touchscreen/ads7846.ko && echo "32" > /sys/class/gpio/export &&
$ echo "out" > /sys/class/gpio/gpio32/direction && insmod /lib/modules/3.18.131/kernel/drivers/input/touchscreen/ads7846_device.ko verbose=
2 busnum=1 cs=1 gpio_pendown=79
$ demo https://example.com/api
ソフトウェアキーボードが表示されたらログとして送信するテキストを入力しSendボタンを押します.
指定された送信先URLにデータが送信されます.
URLエンコーディングされているので適切に処理すれば元のテキストが得られます!
まとめ
実用的なアプリケーションとしてソフトウェアキーボードとGPSを組み合わせたものを開発してみました.
電源入れて即スタンドアロンで動かすにはまだ少し工夫が必要ではありますが有用な使い方として提示するには十分なアプリケーションとなったのではないでしょうか.
コメント