페이지

글목록

레이블이 Mac인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Mac인 게시물을 표시합니다. 모든 게시물 표시

2017년 2월 15일 수요일

[ESP8266] MAC Address 읽기

MAC Address 읽는 함수로 ESP-8266 IC 내부의 2가지 MAC Address 를 읽을 수 있습니다.
참고한 사이트 주소는 다음과 같습니다.
http://www.esp8266.com/viewtopic.php?f=29&t=3587


아직 네트웍 개념이 없어서 잘은 모르겠지만,
1개는 일반 맥 어드레스이고(MAC{STA]) , 또 하나는 Wifi 단독 Server ?(MAC[SOFTAP]) 용 MAC Address 입니다.

Soft AP 는 공유기에 붙이지 않고, 8266가 단독으로 SSID,Password 를 치고 연결할 때
사용하는 방식 으로 알고 있습니다. 
그 뭐시냐... 핸드폰으로 Wifi 스캔하면 SSID가 보이죠. (^^ 공부 좀 더 해야겠네요.)

자 나중에 공부 더 해서 추가할께요.
아뭏든, 아두이노 IDE 에서 스케치 소스 코드만 있으면 실험 가능합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <ESP8266WiFi.h>
 
uint8_t MAC_array[6];
char MAC_char[18];
 
 
void setup() {
  char ser_tx_buff[100];
  
  Serial.begin(115200);
 
  Serial.println();
  // put your setup code here, to run once:
 
  Serial.print("MAC[STA] ->");
  WiFi.macAddress(MAC_array);
  for (int i = 0; i < sizeof(MAC_array); ++i){
    sprintf(MAC_char,"%s%02x:",MAC_char,MAC_array[i]);
  }
  Serial.println(MAC_char);  
 
  MAC_char[0]=0;
  Serial.print("MAC[SOFTAP] ->");
  WiFi.softAPmacAddress(MAC_array);
  for (int i = 0; i < sizeof(MAC_array); ++i){
    sprintf(MAC_char,"%s%02x:",MAC_char,MAC_array[i]);
  }
  Serial.println(MAC_char);  
}
 
void loop() {
  // put your main code here, to run repeatedly:
}
cs

2016년 4월 2일 토요일

[dialog] 긴 device Name을 사용하는 방법 (SPI 메모리 사용시)

이번에 DA14583 으로 제작한 DSPS BLE 모듈에 Device 이름과 MAC Address를 바꿀 상황이 생겨서 
프로그램을 수정하면서 알게된 내용입니다.

SPI Flash 나 JTAG Debug로 RAM에 프로그램을 하는 경우,
Device Name 과 MAC Address 를 수정하는 곳은 nvds.c 파일 입니다.

이 파일에서 다음과 같은 부분을 수정해 주면 됩니다.
const struct nvds_data_struct nvds_data_storage __attribute__((section("nvds_data_storage_area"))) 구조체의 내용인

 //   .NVDS_TAG_DEVICE_NAME                   = "DA1458x",
    .NVDS_TAG_DEVICE_NAME                   = "FiSi Signage",
 //   .NVDS_TAG_BD_ADDRESS                    = {0x01, 0x00, 0x00, 0xCA, 0xEA, 0x80},
    .NVDS_TAG_BD_ADDRESS                    = {0x01, 0x00, 0x00, 0x00, 0x34, 0x12}, // MAC Address 01
    .ADV_DATA_TAG_LEN                       = 27,
    .SCAN_RESP_DATA_TAG_LEN                 = 10,
//    .DEVICE_NAME_TAG_LEN                    = 7,
    .DEVICE_NAME_TAG_LEN                    = 12,

그런데, NVDS.C 파일에서 DEVICE NAME 수정 (길이를 늘렸는데 다 안나옴-8Byte만 나옴)

여기저기 인터넷을 찾아본 결과 (링크)
app_sps_device_project.h 파일에서 다음과 같이 바꿈

#define APP_DFLT_ADV_DATA        "\x11\x07\xb7\x5c\x49\xd2\x04\xa3\x40\x71\xa0\xb5\x35\x85\x3e\xb0\x83\x07"
#define APP_DFLT_ADV_DATA_LEN    (18)
을 다음과 같이 수정
#define APP_DFLT_ADV_DATA        "\x04\xFFHi!"
#define APP_DFLT_ADV_DATA_LEN    (5)

(위의 내용의 설명)
A BLE advertisement package can actually  carry 31bytes of payload in addition to the 6bytes Bluetooth Device Address - total of 37bytes.

In the DSPS implementation, 3 bytes are used for flags and 18 bytes are used for a unique service ID (includes one byte for length and one byte for type). This leaves 10bytes for the length of the name (1 byte), the data type of the name (1byte) and the name itself. As you can see this limits the name to 8bytes/characters.

But don't panic ;o)

You don't have to put a unique service ID in the advertising data. You can just go ahead and remove it. In app_sps_device_project.h change 
#define APP_DFLT_ADV_DATA        "\x11\x07\xb7\x5c\x49\xd2\x04\xa3\x40\x71\xa0\xb5\x35\x85\x3e\xb0\x83\x07"
#define APP_DFLT_ADV_DATA_LEN    (18)
to
#define APP_DFLT_ADV_DATA        "\x04\xFFHi!"
#define APP_DFLT_ADV_DATA_LEN    (5)

This changes the advertised data to a manufacturer specific data set of the phrase "Hi!". And you can extend the Bluetooth Device name in NVDS like this: