Koshian의 농장을 WICED로 다시 작성

참고 사이트



Koshian & WICED에서 개발
Koshian의 농장을 다시 작성해 보았습니다.

WICED 포트 설정



1. [Project]->[Properties] 열기
2. [C/C++ Build]-> [Builder Setting]의 [Build command]를 다음으로 변경
${workspace_loc:/WICED-Smart-SDK}/make UART=protName



Mac이라면 protName이/dev/tty.usbserial~에 대한 느낌

WICED 프로젝트 만들기



1. [File]->[New]->[WICED Smart Designer]를 클릭합니다.
2. [Device Setting] 탭에서 사용하고 싶은 인터페이스에 체크를 넣는다



3. Characteristics 탭에서 UUID와 Name을 원하는 대로 변경하여 사용하려는 서비스를 추가
4.Size(bytes)는 서비스 내에서 사용하고 싶은 Write/Read 용량적인 녀석 (대개 1byte로 충분하다)



5. Characteristic의 Properties 탭에서 Read, Write, Notify를 체크한다
6.Geberate Code를 눌러 프로젝트 만들기

WICED 소스 코드



Pin Assain


  • project_db.c의 const BLE_PROFILE_GPIO_CFG testbutton_gpio_cfg에 정의 된 것 같습니다
  • P24를 INPUT (Button), P4를 OUTPUT (LED)로 설정하는 경우

  • project_db.c
    
    const BLE_PROFILE_GPIO_CFG testbutton_gpio_cfg =
    {
        {
            GPIO_PIN_WP,    // This need to be used to enable/disable NVRAM write protect
            24, 4, -1, -1,
            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 // Other GPIOs are not used
        },
        /*.gpio_flag =*/
        {
            GPIO_SETTINGS_WP,
            GPIO_SETTINGS_BUTTON, GPIO_SETTINGS_LED, 0, 0, 
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
        }
    };
    
    

    버튼 INPUT


  • project.c의 xxx_interrupt_handler가 INPUT 인터럽트 인 것 같습니다
  • 버튼을 누르면 Write

  • project.c
    xxx_interrupt_handler(UINT8 value) {
        // ToDo: handle the interrupts here.
        UINT32 *sendData;
        BOOL _button_pushed = value & 0x01;
        memcpy(&db_pdu.pdu[0], sendData, 4);
        db_pdu.len = 4; // Project作成の時に決めたSizeの大きさ
    
        if(_button_pushed){
            // セントラルにWriteする.
            bleprofile_WriteHandle(HDLC_PUSHBUTTON_BUTTON_VALUE, &db_pdu);
        }
    }
    

    Message read


  • project.c의 xxx_write_handler가 센트럴로부터의 메세지를 수신했을 때의 이벤트 같다.
  • 수신된 숫자만큼 LED를 Blink한다

  • project.c
    int testbutton_write_handler(LEGATTDB_ENTRY_HDR *p) {
        UINT8  writtenbyte;
        UINT16 handle   = legattdb_getHandle(p);
        int    len      = legattdb_getAttrValueLen(p);
        UINT8  *attrPtr = legattdb_getAttrValue(p);
        BOOL changed;
    
        ble_trace1("write_handler: handle %04x", handle);
        changed = __write_handler(handle, len, attrPtr);
    
        if ((len >= 1) && (handle == HDLC_PUSHBUTTON_BUTTON_VALUE)) {
            testbutton_hostinfo.generated.pushbutton_button_client_configuration = attrPtr[0];
            if (testbutton_hostinfo.generated.pushbutton_button_client_configuration != 0){
                bleprofile_LEDBlink(250, 250, testbutton_hostinfo.generated.pushbutton_button_client_configuration);
            }
        }
    
        // Save update to NVRAM if it has been changed.
        if (changed) {
            writtenbyte = bleprofile_WriteNVRAM(VS_BLE_HOST_LIST, sizeof(testbutton_hostinfo), (UINT8 *)&testbutton_hostinfo);
            ble_trace1("NVRAM write:%04x", writtenbyte);
        }
        return 0;
    }
    

    쓰기



    연결


  • 쓰기는 FTDI를 Koshian 연결하고 [Make Target] 탭에서 쓰고 싶은 타겟을 더블 클릭 하면
  • RN 핀은 리셋 핀이며 일반적으로 연결할 필요가 없습니다



  • 자신은 전용 라이터를 자작해서 쓰고 있다



    peripheral UUID 설정


  • Target Name에 [BT_DEVICE_ADDRESS = random]을 추가하면 peripheral UUID를 무작위로 생성합니다

  • 복구 모드


  • 쓰기를 실수로 쓸 수 없게되면 복구 모드에서 Make Target을 실행합니다.

    1. Koshian을 FTDI에 연결 한 다음 리셋한다. RN 핀을 GND로 떨어 뜨리면 리셋된다.
    2. Target Name의 [download]를 [recover]로 변경하고 더블 클릭
  • 좋은 웹페이지 즐겨찾기