iT邦幫忙

0

[IoT自製玩具][Ameba Z2][Note 4] 手機控制LED(2)- httpd & 控制LED

要到IP之後,就可以用手機透過網路控制Amebaz2。先用最陽春的http就好...

1. Enable httpd

httpd範例SDK早就寫好了,打開開關即可。

檔案: project/realtek_amebaz2_v0_example/inc/platform_opts.h

#define CONFIG_EXAMPLE_HTTPD                   1 // 0改成1

燒完firmware重開機,手機就可以連到板子的陽春網頁(沒錯,連網頁都寫好了)。
https://ithelp.ithome.com.tw/upload/images/20200523/20112439zjtPSCBz9H.png

2. 控制LED

因為我要透過http POST來控制LED,所以先把GPIO的code寫在這個檔案 component/common/example/httpd/example_httpd.c

// 在global區域加上以下幾行
#include "gpio_api.h"

// Ref. ambz2_sdk/project/realtek_amebaz2_v0_example/example_sources/gpio_light_weight/scr/main.c
#define GPIO_LED_PIN    PA_23  // LED 一腳插A23,一腳插GND

extern void gpio_direct_write(gpio_t *obj, BOOL value);
gpio_t gpio_led;

// http POST之後執行的function
void homepage_cb(struct httpd_conn *conn)
{
// 中間略

	if(body) {
        // read HTTP body
        memset(body, 0, content_len + 1);
        read_size = httpd_request_read_data(conn, body, content_len);
            
        // 中間略

        // LED
        // 根據陽春SDK網頁,body就是POST收下來的資料,內容會是text1=XXX&text2=XXX,因為我懶得做字串切割(之後再做),就先抓最後一個char就好
        if (body[strlen((char const*)body)-1] == '1') {
            gpio_direct_write(&gpio_led, 1);
            printf("[HANA] LED on\n");
        }
        else if (body[strlen((char const*)body)-1] == '0') {
            gpio_direct_write(&gpio_led, 0);
            printf("[HANA] LED off\n");

// 入口點
static void example_httpd_thread(void *param)
{
// 中間略

    // 初始 LED control pin
    gpio_init(&gpio_led, GPIO_LED_PIN);
    gpio_dir(&gpio_led, PIN_OUTPUT); // direction
    gpio_mode(&gpio_led, PullNone);  // No pull

拿起手機,打開網頁,Text1隨便輸入,只要確保Text2的最後一char是1就好
https://ithelp.ithome.com.tw/upload/images/20200523/20112439lr9d9A0Qe6.png

之後手機返回POST訊息,板子上LED燈也亮了!
https://ithelp.ithome.com.tw/upload/images/20200523/20112439Jiy70P7iIp.png

關燈只要把Text2的最後一char改0就好了,很迅速喔。
/images/emoticon/emoticon34.gif


尚未有邦友留言

立即登入留言