
{"id":13307,"date":"2021-10-06T21:30:28","date_gmt":"2021-10-06T12:30:28","guid":{"rendered":"https:\/\/okiraku-camera.tokyo\/blog\/?p=13307"},"modified":"2021-10-13T15:33:58","modified_gmt":"2021-10-13T06:33:58","slug":"nrf52%e3%81%8b%e3%82%89%e3%82%a2%e3%83%89%e3%83%90%e3%82%bf%e3%82%a4%e3%82%ba%e3%81%97%e3%81%a6esp32%e3%81%a7%e3%82%b9%e3%82%ad%e3%83%a3%e3%83%b3%e3%81%99%e3%82%8b","status":"publish","type":"post","link":"https:\/\/okiraku-camera.tokyo\/blog\/?p=13307","title":{"rendered":"nRF52\u304b\u3089\u30a2\u30c9\u30d0\u30bf\u30a4\u30ba\u3057\u3066esp32\u3067\u30b9\u30ad\u30e3\u30f3\u3059\u308b"},"content":{"rendered":"<figure id=\"attachment_13343\" aria-describedby=\"caption-attachment-13343\" style=\"width: 552px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/okiraku-camera.tokyo\/blog\/wp-content\/uploads\/2021\/10\/8e71c2ca97ff53354d4a7b383586f3d9.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-13343\" src=\"https:\/\/okiraku-camera.tokyo\/blog\/wp-content\/uploads\/2021\/10\/8e71c2ca97ff53354d4a7b383586f3d9-552x414.jpg\" alt=\"\" width=\"552\" height=\"414\" \/><\/a><figcaption id=\"caption-attachment-13343\" class=\"wp-caption-text\">isp1807(nRF52)\u3068ESP32<\/figcaption><\/figure>\n<h1>\u6982\u8981<\/h1>\n<ul style=\"list-style-type: circle;\">\n<li>ISP1807(nRF52840) \u306b\u306f\u30c1\u30c3\u30d7\u6e29\u5ea6\u3092\u6e2c\u308b\u305f\u3081\u306e\u30bb\u30f3\u30b5\u30fcTEMP\u304c\u8f09\u3063\u3066\u3044\u308b\u306e\u3067\u3001\u305d\u306e\u6e2c\u5b9a\u7d50\u679c\u3092BLE\u3067\u30a2\u30c9\u30d0\u30bf\u30a4\u30ba\u3059\u308b\u30b9\u30b1\u30c3\u30c1\u3092\u4f5c\u6210\u3002<\/li>\n<li>ESP32 Arduino core\u306b\u4ed8\u5c5e\u306e\u3044\u304f\u3064\u304b\u306e\u30b5\u30f3\u30d7\u30eb\u3092\u3082\u3068\u306b\u3001\u30b9\u30ad\u30e3\u30f3\u3057\u305f\u30c7\u30fc\u30bf\u3092\u30b7\u30ea\u30a2\u30eb\u30e2\u30cb\u30bf\u306b\u30c0\u30e9\u30c0\u30e9\u3068\u8868\u793a\u3057\u305f\u308a\u3001nRF52\u304b\u3089\u306e\u6e29\u5ea6\u3092\u8868\u793a\u3057\u305f\u308a\u3059\u308b\u30b9\u30b1\u30c3\u30c1\u3092\u4f5c\u6210\u3002<\/li>\n<li>\u5f53\u521d\u3001nRF52\u304b\u3089\u30a2\u30c9\u30d0\u30bf\u30a4\u30ba\u3057\u305f\u6e29\u5ea6\u30c7\u30fc\u30bf\u306e\u7d4c\u6642\u5909\u5316\u3092PC\u3084\u30b9\u30de\u30db(Android)\u3067\u89b3\u6e2c\u3057\u3088\u3046\u3068\u3057\u305f\u304c\u3001\u9069\u5f53\u306a\u30a2\u30d7\u30ea\u304c\u898b\u5f53\u305f\u3089\u306a\u3044\u306e\u3067\u3001\u3057\u3070\u3089\u304f\u304a\u8535\u5165\u308a\u3057\u3066\u3044\u305fESP32 DevKit-C\u4e92\u63db\u54c1\u3092\u4f7f\u3044\u30b7\u30ea\u30a2\u30eb\u30e2\u30cb\u30bf\u306b\u8868\u793a\u3059\u308b\u3053\u3068\u306b\u3057\u305f\u3002<\/li>\n<\/ul>\n<p>\u30d3\u30eb\u30c9\u306f<strong>Arduino IDE (1.8.15)<\/strong>\u3067\u884c\u3044\u3001nRF52\u7528\u306b\u306f<a href=\"https:\/\/github.com\/adafruit\/Adafruit_nRF52_Arduino\" target=\"_blank\" rel=\"noopener noreferrer\"><strong> Adafruit nRF52 BSP (1.1.0)<\/strong><\/a>\u3068<a href=\"https:\/\/github.com\/SWITCHSCIENCE\/Arduino_Board_Package\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>\u30b9\u30a4\u30c3\u30c1\u30b5\u30a4\u30a8\u30f3\u30b9 nRF52 BSP (0.1.9)<\/strong><\/a>\u3092\u3001ESP32\u7528\u306b\u306f<strong><a href=\"https:\/\/github.com\/espressif\/arduino-esp32\" target=\"_blank\" rel=\"noopener noreferrer\">Arduino core ESP32 (2.0.0)<\/a><\/strong> \u3092\u304a\u306e\u304a\u306e\u5c0e\u5165\u3057\u305f\u3002<\/p>\n<h3>ISP1807(nRF52840)\u7528Arduino BSP\u306b\u3064\u3044\u3066<\/h3>\n<p>BSP\u3068\u3044\u3046\u306e\u306f\u3001Arduino <strong>Board Support Package<\/strong> \u306e\u3053\u3068\u3067\u3001Arduino IDE\u306e <strong>\u30c4\u30fc\u30eb\uff0f\u30dc\u30fc\u30c9\u30de\u30cd\u30fc\u30b8\u30e3<\/strong> \u3067\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u30bf\u30fc\u30b2\u30c3\u30c8\u30dc\u30fc\u30c9\u7528\u306e\u30b5\u30dd\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u3067\u3042\u308b\u3002<\/p>\n<p>ISP1807\u7528\u306eBSP\u306e\u5c0e\u5165\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306f\u3001<a href=\"https:\/\/okiraku-camera.tokyo\/blog\/?p=13045\" target=\"_blank\" rel=\"noopener noreferrer\">\u3053\u3061\u3089\u306e\u6295\u7a3f<\/a>\u3092\u53c2\u7167\u306e\u3053\u3068\u3002Adafruit\u00a0 nRF52 BSP\u306f\u6bd4\u8f03\u7684\u983b\u7e41\u306b\u66f4\u65b0\u3055\u308c\u3066\u3044\u3066\u3001\u73fe\u6642\u70b9\u3067\u306e\u6700\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3\u306f1.1.0 \u306b\u306a\u3063\u3066\u3044\u305f\u306e\u3067\u3001\u3053\u308c\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u5229\u7528\u3057\u305f (\u30b9\u30a4\u30c3\u30c1\u30b5\u30a4\u30a8\u30f3\u30b9\u306eISP1807 Micro\u30dc\u30fc\u30c9\u7528BSP\u306f0.19\u7248)\u3002<\/p>\n<h3>ESP32\u7528BSP2.0.0\u3092\u5c0e\u5165<\/h3>\n<p>ESP32\u306b\u89e6\u308b\u306e\u306f3\u5e74\u3076\u308a\u306b\u306a\u308b\u3002Arduino IDE\u306bBSP\u3092\u7d44\u307f\u8fbc\u3080\u305f\u3081\u306e\u3001\u74b0\u5883\u8a2d\u5b9a\uff0f\u8ffd\u52a0\u306e\u30dc\u30fc\u30c9\u30de\u30cd\u30fc\u30b8\u30e3\u306eURL\u00a0 \u3082\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u5909\u308f\u3063\u3066\u3044\u305f\u306e\u3067\u8a2d\u5b9a\u3057\u76f4\u3057\u305f\u3002<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">https:\/\/raw.githubusercontent.com\/espressif\/arduino-esp32\/gh-pages\/package_esp32_dev_index.json<\/pre>\n<p>\u4ee5\u524d\u306f\u3001<span class=\"lang:default highlight:0 decode:true crayon-inline \">https:\/\/dl.espressif.com\/dl\/package_esp32_index.json<\/span> \u3060\u3063\u305f\u3002<\/p>\n<figure id=\"attachment_13334\" aria-describedby=\"caption-attachment-13334\" style=\"width: 552px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/okiraku-camera.tokyo\/blog\/wp-content\/uploads\/2021\/10\/0d40a5e4a645fc6b96e767d64ac0878e.png\"><img loading=\"lazy\" decoding=\"async\" class=\"waku wp-image-13334 size-large\" src=\"https:\/\/okiraku-camera.tokyo\/blog\/wp-content\/uploads\/2021\/10\/0d40a5e4a645fc6b96e767d64ac0878e-552x371.png\" alt=\"\" width=\"552\" height=\"371\" \/><\/a><figcaption id=\"caption-attachment-13334\" class=\"wp-caption-text\">esp32 arduino 2.0.0<\/figcaption><\/figure>\n<p>\u6700\u65b0\u7248\u306e2.0.0\u3092\u5c0e\u5165\u3057\u3066 \u30bf\u30fc\u30b2\u30c3\u30c8\u30dc\u30fc\u30c9\u3092\u9078\u629e\u3057\u3088\u3046\u3068\u3059\u308b\u3068\u3001ESP32C3\u3084S2\u306eDev Module\u304c\u8ffd\u52a0\u3055\u308c\u3066\u3044\u305f\u3002\u3046\u3061\u306b\u3042\u308b\u306e\u306f<em> Not recommend for new design<\/em> \u306e\u30af\u30e9\u30b7\u30c3\u30af\u30e2\u30b8\u30e5\u30fc\u30eb \u306a\u306e\u3067\u3001\u4ee5\u524d\u3068\u540c\u3058\u304f<strong>ESP32 Dev Module<\/strong> \u3092\u9078\u629e\u3057\u305f\u3002<\/p>\n<h3>esp32\u5074\u30b9\u30b1\u30c3\u30c1\u306e\u52d5\u4f5c<\/h3>\n<p>ESP32\u3092\u3064\u306a\u3044\u3060\u30b7\u30ea\u30a2\u30eb\u30e2\u30cb\u30bf\u306b\u306f\u3001\u3053\u3093\u306a\u611f\u3058\u3067\u30b9\u30ad\u30e3\u30f3\u7d50\u679c\u3092\u8868\u793a\u3057\u7d9a\u3051\u308b(\u30ea\u30bb\u30c3\u30c8\u304b\u3089\u958b\u59cb)\u3002<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">ets Jun  8 2016 00:22:57\r\n\r\nrst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)\r\nconfigsip: 0, SPIWP:0xee\r\nclk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00\r\nmode:DIO, clock div:1\r\nload:0x3fff0030,len:1240\r\nload:0x40078000,len:13012\r\nload:0x40080400,len:3648\r\nentry 0x400805f8\r\nESP32_BLE_scan2.ino\r\nconnect to WiFi.....\r\n connecting ntp.nict.jp.\r\nnow =  2021\/10\/02 13:55:19\r\nStart scanning...\r\n13:55:20 fb:d1:6e:41:xx:xx (RSSI:-39) : ffff123440004701\r\n13:55:20 7d:9a:89:67:xx:xx (RSSI:-90) : e0003fd4ca83ef20\r\n13:55:22 fb:d1:6e:41:xx:xx (RSSI:-47) : ffff123441004a01\r\n13:55:23 7d:9a:89:67:xx:xx (RSSI:-92) : e0003fd4ca83ef20\r\n13:55:24 7d:9a:89:67:xx:xx (RSSI:-90) : e0003fd4ca83ef20\r\n13:55:25 fb:d1:6e:41:xx:xx (RSSI:-38) : ffff123441004a01\r\n13:55:27 7d:9a:89:67:xx:xx (RSSI:-89) : e0003fd4ca83ef20\r\n13:55:27 fb:d1:6e:41:xx:xx (RSSI:-47) : ffff123442004701\r\n13:55:29 7d:9a:89:67:xx:xx (RSSI:-88) : e0003fd4ca83ef20\r\n13:55:30 fb:d1:6e:41:xx:xx (RSSI:-38) : ffff123442004701\r\n13:55:32 7d:9a:89:67:xx:xx (RSSI:-88) : e0003fd4ca83ef20\r\n13:55:32 fb:d1:6e:41:xx:xx (RSSI:-46) : ffff123443004701\r\n13:55:34 7d:9a:89:67:xx:xx (RSSI:-91) : e0003fd4ca83ef20\r\n13:55:35 fb:d1:6e:41:xx:xx (RSSI:-38) : ffff123443004701\r\n13:55:37 fb:d1:6e:41:xx:xx (RSSI:-47) : ffff123444004701\r\n13:55:37 7d:9a:89:67:xx:xx (RSSI:-90) : e0003fd4ca83ef20<\/pre>\n<p><span style=\"font-family: 'courier new', courier, monospace;\">fb:d1:6e:41:xx:xx<\/span> \u304c ISP1807\u304b\u3089\u306e\u3082\u306e\u3067\u3001\u3054\u8fd1\u6240\u306eGoogle\u88fdBLE\u6a5f\u5668\u304b\u3089\u306e\u30c7\u30fc\u30bf\u3082\u6df7\u3058\u3063\u3066\u3044\u308b\u3002\u307e\u305f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306bnRF52\u6e29\u5ea6\u30c7\u30fc\u30bf\u7528\u306b\u3042\u308f\u305b\u305f\u8868\u793a\u3082\u53ef\u80fd(\u30b7\u30ea\u30a2\u30eb\u30e2\u30cb\u30bf\u306b&#8221;2&#8243;\u3092\u9001\u4fe1)\u3002<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">14:51:07 29.2\t(RSSI:-33)\r\n14:51:13 29.7\t(RSSI:-34)\r\n14:51:17 30.0\t(RSSI:-34)\r\n14:51:23 30.0\t(RSSI:-34)\r\n14:51:27 30.2\t(RSSI:-33)\r\n14:51:33 30.5\t(RSSI:-33)\r\n14:51:37 30.5\t(RSSI:-34)\r\n14:51:43 30.7\t(RSSI:-34)\r\n14:51:47 31.0\t(RSSI:-46)\r\n14:51:53 31.0\t(RSSI:-46)\r\n14:51:57 31.0\t(RSSI:-46)\r\n14:52:03 31.0\t(RSSI:-46)\r\n14:52:08 31.2\t(RSSI:-46)\r\n14:52:14 31.2\t(RSSI:-48)\r\n14:52:18 31.2\t(RSSI:-46)\r\n14:52:24 31.2\t(RSSI:-47)\r\n...<\/pre>\n<p>nRF52\u306eTEMP\u30bb\u30f3\u30b5\u30fc\u306f\u30c7\u30d0\u30a4\u30b9\u30c0\u30a4\u306e\u6e29\u5ea6\u3092\u6e2c\u308b\u305f\u3081\u306b\u8f09\u3063\u3066\u3044\u308b\u3082\u306e\u3089\u3057\u304f\u3001\u6c17\u6e29\u3092\u6e2c\u308b\u305f\u3081\u306e\u74b0\u5883\u30bb\u30f3\u30b5\u30fc\u3067\u306f\u306a\u3044\u3002\u3060\u304c\u3001\u3060\u3044\u305f\u3044\u5ba4\u6e29+3\uff5e4\u2103\u3067\u5b89\u5b9a\u3057\u3066\u3044\u308b\u3088\u3046\u3060\u3063\u305f\u3002<\/p>\n<p>\u3053\u306e\u3084\u308a\u65b9\u3067\u6e29\u5ea6\u30c7\u30fc\u30bf\u304c\u30bb\u30f3\u30c8\u30e9\u30eb\u5074\u306b\u3046\u307e\u304f\u4f1d\u308f\u308b\u306e\u306a\u3089\u3001\u3061\u3083\u3093\u3068\u3057\u305f\u74b0\u5883\u30bb\u30f3\u30b5\u30fc\u3092I2C\u306a\u3069\u3067\u3044\u304f\u3064\u304b\u3076\u3089\u4e0b\u3052\u3066\u6e29\u5ea6\u6e7f\u5ea6\u305d\u306e\u4ed6\u306e\u6e2c\u5b9a\u306b\u4f7f\u3048\u308b\u3060\u308d\u3046\u3002<\/p>\n<h1>esp32\u5074\u30b9\u30b1\u30c3\u30c1<\/h1>\n<p>\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30b9\u30b1\u30c3\u30c1\u3092\u7528\u610f\u3057\u305f\u3002<\/p>\n<pre class=\"height-set:true nums:true lang:c++ decode:true\">\/*\r\n   Based on Arduino ESP32 examples below.\r\n   \"BLE\\examples\\BLE_scan.ino\", \r\n   \"ESP32\\examples\\Time\\simpeTime.ino\"  \r\n*\/\r\n#include &lt;BLEDevice.h&gt;\r\n#include &lt;BLEUtils.h&gt;\r\n#include &lt;BLEScan.h&gt;\r\n#include &lt;BLEAdvertisedDevice.h&gt;\r\n\r\nstatic const int MF_DATA_SIZE = 30;\r\ntypedef struct _ADV_DEVICE {\r\n  time_t tm; \r\n  int rssi;\r\n  uint8_t addr[ESP_BD_ADDR_LEN];\r\n  uint8_t mf_length;\r\n  uint8_t mf_data[MF_DATA_SIZE];\r\n  _ADV_DEVICE* next;\r\n} adv_device_data_t;\r\n\r\ntypedef struct {  \/\/ nRF52\u304b\u3089\r\n  uint8_t id[2];  \/\/ 0xff 0xff\r\n  uint16_t pid; \/\/\r\n  uint16_t seqno;\r\n  int16_t temp;   \/\/ temp * 100 \r\n} adv_temp_data_t;\r\n\r\nbool have_ntp_time = false; \/\/ ntp\u6642\u523b\u3092\u53d6\u5f97\u6e08\u304b\u3069\u3046\u304b\r\n\r\nstd::string time_short_string(time_t* p) {\r\n  char tmp[16];\r\n  struct tm* pt = localtime(p);\r\n  sprintf(tmp, \"%02d:%02d:%02d\", pt-&gt;tm_hour, pt-&gt;tm_min, pt-&gt;tm_sec);\r\n  return std::string((const char*)tmp);\r\n}  \r\n\r\n#include &lt;WiFi.h&gt;\r\nstatic const char* ssid = \"ssid\";\r\nstatic const char* pass = \"password\";\r\nstatic const char* ntp_server = \"ntp.nict.jp\";\r\nvoid get_ntp_time() {\r\n  int count = 1;\r\n  struct tm _tm;\r\n  Serial.printf(\"connect to WiFi\");\r\n  WiFi.begin(ssid, pass);\r\n  while (!WiFi.isConnected()) {\r\n    delay(2000);\r\n    Serial.print(\".\");\r\n    if (count &gt; 60) {\r\n      WiFi.disconnect(true);\r\n      WiFi.mode(WIFI_OFF);\r\n      Serial.println(\"Connect timeout.\");\r\n      return;\r\n    } else if (count % 20 == 0)\r\n      Serial.println();\r\n    count++;\r\n  }\r\n  Serial.printf(\"\\n connecting %s\", ntp_server);\r\n  for(int i = 0; i &lt; 10; i++) {\r\n    Serial.print(\".\");\r\n    configTime(9 * 3600, 0, ntp_server);\r\n    if (getLocalTime(&amp;_tm)) {\r\n      have_ntp_time = true;\r\n      break;\r\n    }\r\n  }\r\n  Serial.println();\r\n  WiFi.disconnect(true);\r\n  WiFi.mode(WIFI_OFF);\r\n  if (have_ntp_time)\r\n    Serial.printf(\"now =  %04d\/%02d\/%02d %02d:%02d:%02d\\n\",\r\n      _tm.tm_year + 1900, _tm.tm_mon + 1, _tm.tm_mday,\r\n      _tm.tm_hour, _tm.tm_min, _tm.tm_sec);\r\n  else\r\n    Serial.println(\"get_ntp_time() failed.\"); \r\n}\r\n\r\nstd::string bin_hex(uint8_t* bin, int sz) {\r\n  char tmp[101];\r\n  memset(tmp, sizeof(tmp), 0);\r\n  BLEUtils::buildHexData((uint8_t*)tmp, bin, sz);\r\n  return std::string((const char*)tmp);\r\n}\r\n\r\nbool disp_result = true;  \/\/ \u53d7\u4fe1\u90fd\u5ea6\u3054\u3068\u306b\u8868\u793a\r\nbool disp_temp = false; \/\/ true\u306e\u3068\u304d\u306f\u751f\u30c7\u30fc\u30bf,false\u3067TEMP\r\n\r\nadv_device_data_t* first = 0;\r\nadv_device_data_t* current = 0;\r\nint items = 0;\r\nstatic const int max_items = 500;\r\n\r\nvoid list_clear() {\r\n  adv_device_data_t* p = first;\r\n  while (p) {\r\n    adv_device_data_t* next = p-&gt;next;\r\n    free(p);\r\n    p = next;\r\n  }        \r\n  first = current = 0;\r\n  items = 0;   \r\n}\r\n\r\nvoid show_item(adv_device_data_t* p) {\r\n  if (!p)\r\n    return;\r\n  BLEAddress badr(p-&gt;addr);\r\n  if (!disp_temp) {  \r\n    Serial.printf(\"%s\", time_short_string(&amp;p-&gt;tm).c_str());\r\n    Serial.printf(\" %s (RSSI:%d)\", badr.toString().c_str(), p-&gt;rssi);\r\n    Serial.printf(\" : %s\",  bin_hex(p-&gt;mf_data, p-&gt;mf_length).c_str());\r\n    Serial.println();\r\n  } else {\r\n    if (p-&gt;mf_length &gt; 5) {\r\n      adv_temp_data_t* pTemp = (adv_temp_data_t*)p-&gt;mf_data;\r\n      if (pTemp-&gt;id[0] == 0xff &amp;&amp; pTemp-&gt;id[1] == 0xff &amp;&amp; pTemp-&gt;pid == 0x3412) {\r\n        static int last_seqno = 0;\r\n        if (last_seqno != pTemp-&gt;seqno) {\r\n          last_seqno = pTemp-&gt;seqno;\r\n          float temp = (float)(pTemp-&gt;temp \/ 100.0);\r\n          Serial.printf(\"%s\", time_short_string(&amp;p-&gt;tm).c_str());\r\n          Serial.printf(\" %2.2f\", temp);\r\n          Serial.printf(\"\\t(RSSI:%d)\", p-&gt;rssi);\r\n          Serial.println();\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\nvoid list_add(BLEAdvertisedDevice* padvdev) {\r\n  adv_device_data_t* padv = (adv_device_data_t*)malloc(sizeof(adv_device_data_t));\r\n  if (!padv)\r\n    return;\r\n  memset(padv, 0, sizeof(adv_device_data_t));\r\n  padv-&gt;tm = time(NULL);\r\n  memcpy(padv-&gt;addr, padvdev-&gt;getAddress().getNative(), ESP_BD_ADDR_LEN);\r\n  padv-&gt;rssi =  padvdev-&gt;getRSSI();\r\n  if (padvdev-&gt;haveManufacturerData()) {\r\n    padv-&gt;mf_length = min((int)padvdev-&gt;getManufacturerData().length(), MF_DATA_SIZE);\r\n    uint8_t* p = (uint8_t*) padvdev-&gt;getManufacturerData().data();\r\n    memcpy(padv-&gt;mf_data, p, padv-&gt;mf_length);\r\n  }\r\n  if (disp_result)\r\n    show_item(padv);\r\n\r\n  if (items &gt; max_items) {\r\n    if (first) {\r\n      if (current == first)\r\n        current = first-&gt;next;\r\n      adv_device_data_t* p = first;        \r\n      first = first-&gt;next;\r\n      free(p);\r\n      items--;\r\n    }\r\n  }\r\n  if (!first)\r\n    first = current = padv;\r\n  else {\r\n    current-&gt;next = padv;\r\n    current = padv;    \r\n  }\r\n  items++;\r\n}\r\n\r\nvoid show_log() {\r\n  adv_device_data_t* p = first;\r\n  while (p) {\r\n    show_item(p);\r\n    p = p-&gt;next;\r\n  }        \r\n}\r\n\r\nclass MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks {\r\n    void onResult(BLEAdvertisedDevice advdev) {\r\n      list_add(&amp;advdev);  \r\n    }\r\n};\r\n\r\nBLEScan* pBLEScan;\r\nvoid setup() {\r\n  Serial.begin(115200);\r\n  Serial.println(\"ESP32_BLE_scan2.ino\");\r\n  get_ntp_time();\r\n  Serial.println(\"Start scanning...\");\r\n  BLEDevice::init(\"\");\r\n  pBLEScan = BLEDevice::getScan(); \/\/create new scan\r\n  pBLEScan-&gt;setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks());\r\n  pBLEScan-&gt;setActiveScan(true); \/\/active scan uses more power, but get results faster\r\n  pBLEScan-&gt;setInterval(500);\r\n  pBLEScan-&gt;setWindow(500);  \/\/ less or equal setInterval value\r\n}\r\n\r\nvoid loop() {\r\n  BLEScanResults foundDevices = pBLEScan-&gt;start(2, false);  \/\/ 2\u79d2\r\n  pBLEScan-&gt;clearResults();   \/\/ delete results fromBLEScan buffer to release memory\r\n    \r\n  delay(1000);\r\n  char cmd = 0;\r\n  while (Serial.available()) {\r\n    char c = Serial.read();\r\n    switch(c) {\r\n      bool save_flag;\r\n    case '1':\r\n      disp_result = true;\r\n      disp_temp = false;\r\n      Serial.println(\"\\n\\n1. Show advertised data.\");\r\n      break;\r\n    case '2':          \r\n      disp_result = true;\r\n      disp_temp = true;\r\n      Serial.println(\"\\n\\n2. Show nrf52 TEMP value.\");\r\n      break;    \r\n    case '3':\r\n      Serial.println(\"\\n\\n3. Show data log.\");\r\n      disp_result = false;\r\n      show_log();\r\n      break;\r\n    case '9':\r\n      save_flag = disp_result;\r\n      disp_result = false;\r\n      Serial.println(\"\\n\\n9. Get ntp time.\");      \r\n      get_ntp_time();\r\n      disp_result = save_flag;\r\n      break;\r\n    default:\r\n      break;      \r\n    }\r\n  }  \r\n}<\/pre>\n<h3>ESP32\u7528\u30b9\u30b1\u30c3\u30c1\u306e\u6982\u7565<\/h3>\n<p><em>BLEScan()<\/em> \u306b\u3088\u3063\u3066\u30a2\u30c9\u30d0\u30bf\u30a4\u30b8\u30f3\u30b0\u30c7\u30fc\u30bf\u306e\u30b9\u30ad\u30e3\u30f3\u3092\u958b\u59cb\u3059\u308b\u3002\u898b\u3064\u304b\u308b\u3068 <em>BLEAdvertisedDevice<\/em> \u30af\u30e9\u30b9\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u5185\u5bb9\u304c\u683c\u7d0d\u3055\u308c\u3066\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u3055\u308c\u308b\u3002\u305d\u308c\u3092\u69cb\u9020\u4f53 (<em>adv_device_data_t<\/em>) \u306b\u683c\u7d0d\u3057\u3066\u30ea\u30f3\u30af\u30ea\u30b9\u30c8\u306b\u4fdd\u5b58\u3059\u308b\u3068\u5171\u306b\u30b7\u30ea\u30a2\u30eb\u30e2\u30cb\u30bf\u306b\u8868\u793a\u3059\u308b\u3002<\/p>\n<p>\u30ea\u30f3\u30af\u30ea\u30b9\u30c8\u306b\u306f\u6700\u5927500\u4ef6\u307e\u3067\u683c\u7d0d\u3059\u308b\u3088\u3046\u306b\u3057\u3001\u30b7\u30ea\u30a2\u30eb\u30e2\u30cb\u30bf\u3078\u306e\u64cd\u4f5c(\u6587\u5b57\u306e\u9001\u4fe1)\u3067\u3001\u30ea\u30b9\u30c8\u5185\u306e\u5168\u30c7\u30fc\u30bf\u3092\u518d\u8868\u793a\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u305f\u3002<\/p>\n<p><em>BLEAdvertisedDevice<\/em>\u306b\u306f\u3001\u306a\u305c\u304b <em>getADType()<\/em> \u3068\u3044\u3046\u30e1\u30f3\u30d0\u304c\u306a\u3044\u306e\u3067\u30a2\u30c9\u30d0\u30bf\u30a4\u30b8\u30f3\u30b0\u30c7\u30fc\u30bf\u306e\u30bf\u30a4\u30d7\u306f\u683c\u7d0d\u3057\u3066\u3044\u306a\u3044\u304c\u3001BLE\u30d3\u30fc\u30b3\u30f3\u76f8\u5f53(\u30a2\u30c9\u30ec\u30b9\u3001\u30e1\u30fc\u30ab\u30fcID \u3001\u30de\u30cb\u30e5\u30d5\u30a1\u30af\u30c1\u30e3\u30e9\u30fc\u30c7\u30fc\u30bf\u304a\u3088\u3073rssi)\u306e\u30c7\u30fc\u30bf\u306f\u8a18\u9332\uff0f\u8868\u793a\u3059\u308b\u3088\u3046\u306b\u3057\u305f\u3002 \u8907\u6570\u30d6\u30ed\u30c3\u30af\u306e\u30c7\u30fc\u30bf\u306b\u306f\u5bfe\u5fdc\u3057\u3066\u3044\u306a\u3044\u3002<\/p>\n<p>\u904e\u53bb\u30c7\u30fc\u30bf\u3092\u4fdd\u5b58\u3059\u308b\u306b\u3042\u305f\u308a\u3001WiFi\u3092\u4f7f\u3063\u3066ntp\u30b5\u30fc\u30d0\u30fc\u306b\u63a5\u7d9a\u3057\u3066\u73fe\u5728\u6642\u523b\u3092\u53d6\u5f97\u3059\u308b\u3088\u3046\u306b\u3057\u305f\u3002Arduino IDE\u306e\u30b7\u30ea\u30a2\u30eb\u30e2\u30cb\u30bf\u306b\u306f\u3001<strong>\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u3092\u8868\u793a<\/strong> \u3068\u3044\u3046\u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u3042\u308b\u306e\u3067\u8868\u793a\u3059\u308b\u3060\u3051\u306a\u3089\u4e0d\u8981\u306a\u306e\u3060\u304c\u3001\u53d7\u4fe1\u30ed\u30b0\u3092\u30d5\u30e9\u30c3\u30b7\u30e5\u306b\u4fdd\u5b58\u3057\u3066\u304a\u304f\u5834\u5408\u3092\u8003\u3048\u3066\u6642\u523b\u3082\u8a18\u9332\u3059\u308b\u3088\u3046\u306b\u3057\u305f\u3002<\/p>\n<p>WiFi\u306f\u3059\u3050\u5207\u308b\u3088\u3046\u306b\u3057\u3066\u3044\u308b\u306e\u3067\u3001\u9577\u671f\u9593\u4f7f\u3063\u3066\u3044\u308b\u3068\u8aa4\u5dee\u304c\u3067\u3066\u304f\u308b\u3002\u305d\u306e\u305f\u3081\u3001\u30b7\u30ea\u30a2\u30eb\u30e2\u30cb\u30bf\u3078\u306e\u64cd\u4f5c(&#8220;9&#8243;\u306e\u9001\u4fe1)\u3067\u6642\u523b\u306e\u518d\u53d6\u5f97\u3092\u884c\u3046\u3088\u3046\u306b\u3057\u305f\u3002<\/p>\n<h4>\u30d3\u30eb\u30c9\u7d50\u679c\u304a\u3088\u3073\u30d1\u30fc\u30c6\u30a3\u30b7\u30e7\u30f3\u30b9\u30ad\u30fc\u30de<\/h4>\n<p>\u30d3\u30eb\u30c9\u3059\u308b\u3068\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u3063\u305f\u3002<\/p>\n<pre class=\"lang:default decode:true\">\u6700\u59272097152\u30d0\u30a4\u30c8\u306e\u30d5\u30e9\u30c3\u30b7\u30e5\u30e1\u30e2\u30ea\u306e\u3046\u3061\u3001\u30b9\u30b1\u30c3\u30c1\u304c1375449\u30d0\u30a4\u30c8\uff0865%\uff09\u3092\u4f7f\u3063\u3066\u3044\u307e\u3059\u3002\r\n\u6700\u5927327680\u30d0\u30a4\u30c8\u306eRAM\u306e\u3046\u3061\u3001\u30b0\u30ed\u30fc\u30d0\u30eb\u5909\u6570\u304c38996\u30d0\u30a4\u30c8\uff0811%\uff09\u3092\u4f7f\u3063\u3066\u3044\u3066\u3001\u30ed\u30fc\u30ab\u30eb\u5909\u6570\u3067288684\u30d0\u30a4\u30c8\u4f7f\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/pre>\n<p>\u30b9\u30b1\u30c3\u30c1\u304c<strong>1,375,449\u30d0\u30a4\u30c8<\/strong>\u4f7f\u3063\u3066\u3044\u308b\u3002\u306a\u3093\u3067\u3053\u3093\u306a\u306b\u5927\u304d\u3044\u3093\u3060\u308d\u3046\u3002OTA\u53ef\u80fd\u306a\u30d1\u30fc\u30c6\u30a3\u30b7\u30e7\u30f3\u30b9\u30ad\u30fc\u30de\u3067\u306f\u30c0\u30e1\u3067\u30012MB APP\/2MB SPIFFS \u3068\u3044\u3046\u69cb\u6210\u3067\u30d3\u30eb\u30c9\u3059\u308b\u5fc5\u8981\u304c\u3042\u3063\u305f\u3002<\/p>\n<h1>ISP1807 (nRF52)\u5074\u30b9\u30b1\u30c3\u30c1<\/h1>\n<p>\u5b9a\u671f\u7684\u306b\u30a2\u30c9\u30d0\u30bf\u30a4\u30ba\u3092\u884c\u3046\u30b9\u30b1\u30c3\u30c1\u3068\u3057\u3066\u3001Adafruit\u306enRF52\u30e9\u30a4\u30d6\u30e9\u30ea\u306b\u542b\u307e\u308c\u3066\u3044\u308b\u3001<em>beacon.ino\u3084adv_advanced.ino<\/em> \u3068\u3044\u3063\u305f\u30b5\u30f3\u30d7\u30eb\u30b9\u30b1\u30c3\u30c1\u3092\u53c2\u8003\u306b\u4ee5\u4e0b\u3092\u7528\u610f\u3057\u305f\u3002<\/p>\n<pre class=\"nums:true lang:default decode:true\">\/\/ temp_adv2.ino\r\n#include \"bluefruit.h\"\r\n\r\ntypedef struct {\r\n  uint8_t id[2];  \/\/ maker_id \u306f 0xffff \u306b\u56fa\u5b9a\r\n  uint16_t pid;   \/\/ \u9001\u4fe1\u5074\u306e\u8b58\u5225\u7528\r\n  uint16_t seqno; \/\/ \u540c\u3058\u6e2c\u5b9a\u6a5f\u4f1a\u304b\u3069\u3046\u304b\u306e\u5224\u5225\u7528\r\n  int16_t temp;   \/\/ \u6e29\u5ea6\u30c7\u30fc\u30bf\r\n} adv_data_t;\r\n\r\nadv_data_t adv_data = {\r\n  .id = {0xff, 0xff},\r\n  .pid = 0x3412,\r\n  .seqno = 0,\r\n };\r\n\r\nvoid adv_temp() {\r\n  adv_data.temp = (int16_t)(readCPUTemperature() * 100.0);\r\n  adv_data.seqno++;\r\n  if (adv_data.seqno &gt; 9999)\r\n    adv_data.seqno = 0;\r\n  Bluefruit.Advertising.clearData();\r\n  Bluefruit.Advertising.addData(BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA, &amp;adv_data, sizeof(adv_data));\r\n  Bluefruit.Advertising.start(5); \/\/ \r\n}\r\n\r\nvoid setup() {\r\n  Bluefruit.begin();\r\n  Bluefruit.autoConnLed(false);\r\n  Bluefruit.setTxPower(-40);    \/\/ Check bluefruit.h for supported values\r\n  Bluefruit.Advertising.addFlags(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);\r\n  Bluefruit.Advertising.setType(BLE_GAP_ADV_TYPE_NONCONNECTABLE_NONSCANNABLE_UNDIRECTED);\r\n  Bluefruit.Advertising.addData(BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA, &amp;adv_data, sizeof(adv_data));\r\n  Bluefruit.Advertising.setIntervalMS(400, 2500); \/\/ \r\n  Bluefruit.Advertising.setFastTimeout(1);  \r\n}\r\n\r\nvoid loop() { \r\n  adv_temp();\r\n  delay(10000);\r\n}<\/pre>\n<h3>nRF52\u7528\u30b9\u30b1\u30c3\u30c1\u306e\u6982\u7565<\/h3>\n<p><em>setup()<\/em> \u3067\u30a2\u30c9\u30d0\u30bf\u30a4\u30b8\u30f3\u30b0\u306e\u305f\u3081\u306e\u3044\u308d\u3044\u308d\u306a\u30d5\u30e9\u30b0\u3084\u7a2e\u5225\u306e\u8a2d\u5b9a\u3092\u884c\u3044\u3001<em>loop()<\/em> \u5185\u306710\u79d2\u3054\u3068\u306b <em>adv_temp()<\/em> \u3092\u547c\u3076\u3053\u3068\u3067\u6e29\u5ea6\u30c7\u30fc\u30bf\u306e\u9001\u4fe1\u3092\u884c\u3063\u3066\u3044\u308b\u3002<\/p>\n<p>\u30bb\u30f3\u30c8\u30e9\u30eb\u5074(esp32)\u304c\u30b9\u30ad\u30e3\u30f3\u3057\u3066\u3044\u308b\u671f\u9593\u306b\u9001\u4fe1\u3057\u306a\u3044\u3068\u30c7\u30fc\u30bf\u304c\u5931\u308f\u308c\u3066\u3057\u307e\u3046\u306e\u3067\u3001<em>Bluefruit.Advertising.start()\u00a0<\/em> \u306b\u6307\u5b9a\u3059\u308b\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u6642\u9593(\u79d2)\u3068\u3001<em>Bluefruit.Advertising.setIntervalMS()\u00a0 \u3084 Bluefruit.Advertising.setFastTimeout()<\/em> \u3067\u6307\u5b9a\u3059\u308b\u9001\u4fe1\u9593\u9694\u306a\u3069\u306f\u5b9f\u969b\u306e\u30b9\u30ad\u30e3\u30f3\u7d50\u679c\u3092\u898b\u306a\u304c\u3089\u3001\u983b\u7e41\u306b\u306a\u308a\u3059\u304e\u305a\u6b20\u5831\u3082\u5897\u3048\u3059\u304e\u305a\u3068\u3044\u3063\u305f\u5024\u306b\u8a2d\u5b9a\u3057\u305f\u3002<\/p>\n<p>\u3053\u306e\u30b9\u30b1\u30c3\u30c1\u3092\u52d5\u304b\u3057\u3066\u3044\u308b\u3068\u304d\u306e\u6d88\u8cbb\u96fb\u6d41\u306f\u30c6\u30b9\u30bf\u30fc\u8aad\u307f\u3067\u7d044.6mA (PC\u306b\u63a5\u7d9a\u3057\u305fUSB\u30b1\u30fc\u30d6\u30eb\u306eVBUS\u306e\u96fb\u6d41) \u3060\u3063\u305f\u3002\u3082\u3046\u3061\u3087\u3063\u3068\u5c11\u306a\u304f\u3066\u3082\u3044\u3044\u3093\u3058\u3083\u306a\u3044\u306e\u3001\u3068\u601d\u3063\u3066\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30b9\u30b1\u30c3\u30c1\u3082\u7528\u610f\u3057\u3066\u307f\u305f\u3002<\/p>\n<h3>suspendLoop \u3092\u4f7f\u3063\u305f\u30b9\u30b1\u30c3\u30c1<\/h3>\n<pre class=\"nums:true lang:default decode:true \">\/\/ temp_adv3.ino\r\n#include \"bluefruit.h\"\r\n\r\ntypedef struct {\r\n  uint8_t id[2];  \/\/ maker_id \u306f 0xffff \u306b\u56fa\u5b9a\r\n  uint16_t pid;   \/\/ \u9001\u4fe1\u5074\u306e\u8b58\u5225\u7528\r\n  uint16_t seqno; \/\/ \u540c\u3058\u6e2c\u5b9a\u6a5f\u4f1a\u304b\u3069\u3046\u304b\u306e\u5224\u5225\u7528\r\n  int16_t temp;   \/\/ \u6e29\u5ea6\u30c7\u30fc\u30bf\r\n} adv_data_t;\r\n\r\nadv_data_t adv_data = {\r\n  .id = {0xff, 0xff},\r\n  .pid = 0x3412,\r\n  .seqno = 0,\r\n };\r\n\r\nvoid adv_temp() {\r\n  adv_data.temp = (int16_t)(readCPUTemperature() * 100.0);\r\n  adv_data.seqno++;\r\n  if (adv_data.seqno &gt; 9999)\r\n    adv_data.seqno = 0;\r\n  Bluefruit.Advertising.clearData();\r\n  Bluefruit.Advertising.addData(BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA, &amp;adv_data, sizeof(adv_data));\r\n  Bluefruit.Advertising.start(5); \/\/ \r\n}\r\n\r\nvoid adv_stop_cb() {\r\n  Bluefruit.Advertising.stop();\r\n  delay(10000);\r\n  adv_temp();\r\n}\r\n\r\nvoid setup() {\r\n  Bluefruit.configPrphBandwidth(BANDWIDTH_LOW);\r\n  Bluefruit.begin();\r\n  Bluefruit.autoConnLed(false);\r\n  Bluefruit.setTxPower(-40);    \/\/ Check bluefruit.h for supported values\r\n  Bluefruit.Advertising.addFlags(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);\r\n  Bluefruit.Advertising.setType(BLE_GAP_ADV_TYPE_NONCONNECTABLE_NONSCANNABLE_UNDIRECTED);\r\n  Bluefruit.Advertising.addData(BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA, &amp;adv_data, sizeof(adv_data));\r\n  Bluefruit.Advertising.setIntervalMS(400, 2500); \/\/ \r\n  Bluefruit.Advertising.setFastTimeout(1);  \r\n  Bluefruit.Advertising.setStopCallback(adv_stop_cb);\r\n  adv_temp();\r\n  suspendLoop();\/\/ loop \u30bf\u30b9\u30af\u3092\u30b5\u30b9\u30da\u30f3\u30c9\u3059\u308b\u3002\r\n}\r\nvoid loop() { }<\/pre>\n<p>\u3053\u3061\u3089\u3082\u7d0410\u79d2\u9593\u9694\u3067\u6e29\u5ea6\u6e2c\u5b9a\u3068\u30a2\u30c9\u30d0\u30bf\u30a4\u30b8\u30f3\u30b0\u3092\u884c\u3046\u304c\u3001<em>suspendLoop()<\/em> \u306b\u3088\u3063\u3066loop\u30bf\u30b9\u30af\u3092\u30b5\u30b9\u30da\u30f3\u30c9\u72b6\u614b\u306b\u3057\u3066\u3044\u308b\u3002\u305d\u306e\u4ee3\u308f\u308a\u3001\u30a2\u30c9\u30d0\u30bf\u30a4\u30b8\u30f3\u30b0\u671f\u9593\u304c\u7d42\u4e86\u3059\u308b\u3054\u3068\u306b\u00a0 <em>adafruit_ble_task<\/em> \u304c <em>adv_stop_cb()<\/em> \u3092\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u3057\u3066\u304f\u308c\u308b\u306e\u3067\u3001\u9023\u7d9a\u7684\u306a\u30a2\u30c9\u30d0\u30bf\u30a4\u30b8\u30f3\u30b0\u304c\u6301\u7d9a\u3059\u308b\u3002\u305f\u3060\u3001\u30bf\u30b9\u30af\u306e\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u5185\u306710\u79d2\u9593\u3082delay() \u3057\u3066\u3057\u307e\u3046\u306e\u306f\u3001\u597d\u307e\u3057\u304f\u306f\u306a\u3044\u3060\u308d\u3046\u3002<\/p>\n<p>\u3053\u3061\u3089\u306e\u30b9\u30b1\u30c3\u30c1\u306e\u65b9\u304cFreeRTOS\u306e\u30bf\u30b9\u30af\u304c1\u3064\u6b62\u307e\u308b\u5206\u3060\u3051\u6709\u52b9\u304b\u3068\u601d\u3063\u305f\u304c\u3001\u30c6\u30b9\u30bf\u30fc\u8aad\u307f\u306e\u6d88\u8cbb\u96fb\u6d41\u306f\u3084\u306f\u308a4.6mA\u7a0b\u5ea6\u3060\u3063\u305f\u30020.1mA\u4ee5\u4e0a\u306e\u52b9\u679c\u304c\u3042\u308b\u308f\u3051\u306f\u306a\u3044\u304b\u3002<\/p>\n<h3>\u30a2\u30c9\u30d0\u30bf\u30a4\u30b8\u30f3\u30b0\u30c7\u30fc\u30bf\u306e\u4e2d\u8eab<\/h3>\n<p>\u3053\u306e\u30b9\u30b1\u30c3\u30c1\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30c7\u30fc\u30bf\u3092\u542b\u3080\u30da\u30a4\u30ed\u30fc\u30c9\u3092\u98db\u3070\u3057\u3066\u3044\u308b\u3002<\/p>\n<figure id=\"attachment_13377\" aria-describedby=\"caption-attachment-13377\" style=\"width: 321px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/okiraku-camera.tokyo\/blog\/wp-content\/uploads\/2021\/10\/advtemp1.drawio-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-13377\" src=\"https:\/\/okiraku-camera.tokyo\/blog\/wp-content\/uploads\/2021\/10\/advtemp1.drawio-1.png\" alt=\"\" width=\"321\" height=\"71\" \/><\/a><figcaption id=\"caption-attachment-13377\" class=\"wp-caption-text\">\u30da\u30a4\u30ed\u30fc\u30c9<\/figcaption><\/figure>\n<p>\u3053\u306e\u30da\u30a4\u30ed\u30fc\u30c9\u306e\u5185\u5bb9\u306f\u69cb\u9020\u4f53 adv_data_t \u3068\u3057\u3066\u5b9a\u7fa9\u3057\u3066\u3042\u3063\u3066\u3001\u6e2c\u5b9a\u6a5f\u4f1a\u3054\u3068\u306bSeqno\u3068temp\u3092\u66f4\u65b0\u3059\u308b\u3002<\/p>\n<pre class=\"lang:default decode:true\">typedef struct {\r\n  uint8_t id[2]; \/\/ maker_id \u306f 0xffff \u306b\u56fa\u5b9a\r\n  uint16_t pid;  \/\/ \u9001\u4fe1\u5074\u306e\u8b58\u5225\u7528\r\n  int16_t seqno; \/\/ \u540c\u3058\u6e2c\u5b9a\u6a5f\u4f1a\u304b\u3069\u3046\u304b\u306e\u5224\u5225\u7528\r\n  int16_t temp;  \/\/ \u6e29\u5ea6\u30c7\u30fc\u30bf\r\n} adv_data_t;<\/pre>\n<p>\u30da\u30a4\u30ed\u30fc\u30c9\u306f\u6700\u592731\u30d0\u30a4\u30c8\u3067\u3001\u30a2\u30c9\u30d0\u30bf\u30a4\u30b8\u30f3\u30b0\u30c7\u30fc\u30bf\u306e\u9577\u3055\u3001\u7a2e\u5225\u3001\u30e1\u30fc\u30ab\u30fcID\u3092\u9664\u304f\u306827\u30d0\u30a4\u30c8\u307e\u3067\u4efb\u610f\u306e\u30c7\u30fc\u30bf\u3092\u683c\u7d0d\u3067\u304d\u308b\u306e\u3067\u3001\u3053\u306e\u69cb\u9020\u4f53\u3092\u3055\u3089\u306b\u62e1\u5f35\u3057\u3066\u8907\u6570\u306e\u30bb\u30f3\u30b5\u30fc\u304b\u3089\u5f97\u305f\u5024\u3092\u98db\u3070\u3059\u3053\u3068\u3082\u3067\u304d\u308b\u3060\u308d\u3046\u3002<\/p>\n<p><em>pid<\/em> \u306f\u3001\u8907\u6570\u306enRF52\u304b\u3089\u30a2\u30c9\u30d0\u30bf\u30a4\u30b8\u30f3\u30b0\u3059\u308b\u3088\u3046\u306a\u3068\u304d\u3001\u6e2c\u5b9a\u70b9\u306e\u8b58\u5225\u7528\u306b\u5b9a\u7fa9\u3057\u305f\u3002<\/p>\n<p><em>seqno <\/em>\u306f\u3001\u6e2c\u5b9a\u3059\u308b\u3054\u3068\u306b\u30a4\u30f3\u30af\u30ea\u30e1\u30f3\u30c8\u3057\u3066\u3044\u308b\u3002\u53d7\u4fe1\u5074\u306f\u3001\u540c\u3058\u30bf\u30a4\u30df\u30f3\u30b0\u3067\u6e2c\u5b9a\u3057\u305f\u30c7\u30fc\u30bf\u3092\u4f55\u5ea6\u3082\u53d7\u3051\u53d6\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u306e\u3067\u3001\u524d\u56de\u306eseqno\u3068\u6bd4\u8f03\u3057\u3066\u4e00\u81f4\u3057\u3066\u3044\u308b\u5834\u5408\u306f\u91cd\u8907\u3068\u307f\u306a\u305b\u308b\u3088\u3046\u306b\u3057\u305f\u3002esp32\u5074\u30b9\u30b1\u30c3\u30c1\u306e<em> show_item()<\/em> \u306b\u305d\u306e\u305f\u3081\u306e\u51e6\u7406\u3092\u5165\u308c\u305f\u3002<\/p>\n<h4>\u30d3\u30eb\u30c9\u7d50\u679c<\/h4>\n<pre class=\"lang:default highlight:0 decode:true\">\u6700\u5927815104\u30d0\u30a4\u30c8\u306e\u30d5\u30e9\u30c3\u30b7\u30e5\u30e1\u30e2\u30ea\u306e\u3046\u3061\u3001\u30b9\u30b1\u30c3\u30c1\u304c111212\u30d0\u30a4\u30c8\uff0813%\uff09\u3092\u4f7f\u3063\u3066\u3044\u307e\u3059\u3002\r\n\u6700\u5927237568\u30d0\u30a4\u30c8\u306eRAM\u306e\u3046\u3061\u3001\u30b0\u30ed\u30fc\u30d0\u30eb\u5909\u6570\u304c13724\u30d0\u30a4\u30c8\uff085%\uff09\u3092\u4f7f\u3063\u3066\u3044\u3066\u3001\u30ed\u30fc\u30ab\u30eb\u5909\u6570\u3067223844\u30d0\u30a4\u30c8\u4f7f\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/pre>\n<p>\u305d\u308c\u306a\u308a\u306b\u5927\u304d\u304f\u306f\u306a\u3063\u305f\u304c\u3001esp32\u3068\u6bd4\u3079\u308b\u3068\u3068\u3066\u3082\u30b3\u30f3\u30d1\u30af\u30c8\u3060\u308d\u3046\u3002<\/p>\n<h1>\u304d\u3087\u3046\u306e\u307e\u3068\u3081<\/h1>\n<p>\u5f53\u521d\u306e\u76ee\u7684\u306f\u3001\u30a2\u30c9\u30d0\u30bf\u30a4\u30b8\u30f3\u30b0\u6642\u306e\u6d88\u8cbb\u96fb\u6d41\u3092\u6e2c\u308b\u3053\u3068\u3060\u3063\u305f\u3002\u305d\u306e\u305f\u3081\u306b\u306f\u3001\u30b9\u30b1\u30c3\u30c1\u304c\u5b89\u5b9a\u3057\u3066\u30a2\u30c9\u30d0\u30bf\u30a4\u30b8\u30f3\u30b0\u30c7\u30fc\u30bf\u3092\u98db\u3070\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b\u5fc5\u8981\u304c\u3042\u3063\u3066\u3001esp32\u5074\u306e\u30b9\u30b1\u30c3\u30c1\u3082\u7528\u610f\u3059\u308b\u3053\u3068\u306b\u306a\u3063\u305f\u3002<\/p>\n<p>\u4eca\u56de\u306e\u30b9\u30b1\u30c3\u30c1\u52d5\u4f5c\u4e2d\u306eUSB\u7d4c\u7531\u3067\u306e\u6d88\u8cbb\u96fb\u6d41\u306f\u30c6\u30b9\u30bf\u30fc\u8aad\u307f\u3067\u7d044.6mA \u3060\u3063\u305f\u3002\u30c6\u30b9\u30bf\u30fc\u8aad\u307f\u306a\u306e\u3067\u77ac\u9593\u7684\u306b\u306f\u3082\u3063\u3068\u6d41\u308c\u3066\u3044\u308b\u306e\u304b\u3082\u3057\u308c\u306a\u3044\u3002\u305d\u308c\u306b\u3057\u3066\u3082\u3001\u3061\u3087\u3063\u3068\u96fb\u6d41\u304c\u5927\u304d\u3059\u304e\u308b\u5370\u8c61\u306a\u306e\u3067\u3001\u3082\u3046\u3061\u3087\u3063\u3068\u8abf\u3079\u3066\u307f\u308b\u3053\u3068\u306b\u3057\u305f\u3002<\/p>\n<p>\u3082\u3063\u3068\u3082\u3001PC(\u30cf\u30d6)\u3068USB\u30b1\u30fc\u30d6\u30eb\u3067\u63a5\u7d9a\u3057\u30b7\u30ea\u30a2\u30eb\u901a\u4fe1\u3082\u3067\u304d\u308b\u72b6\u614b\u306e\u307e\u307e\u3067\u96fb\u6d41\u306e\u591a\u3044\u5c11\u306a\u3044\u3092\u8003\u3048\u3066\u3082\u3042\u307e\u308a\u610f\u5473\u304c\u306a\u3044\u306e\u304b\u3082\u3057\u308c\u306a\u3044\u304c\u3002\u6b21\u56de\u306f\u3001ISP1807\u306e\u3044\u308d\u3044\u308d\u3068\u30dd\u30a4\u30f3\u30c8\u3067\u6d88\u8cbb\u96fb\u6d41\u3092\u6e2c\u5b9a\u3057\u3066\u307f\u305f\u4ee5\u4e0b\u306e\u8a71\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<blockquote class=\"wp-embedded-content\" data-secret=\"Omc6SsHj22\"><p><a href=\"https:\/\/okiraku-camera.tokyo\/blog\/?p=13365\">ISP1807 Micro\u30dc\u30fc\u30c9\u306e\u6d88\u8cbb\u96fb\u6d41\u3092\u6e2c\u3063\u3066\u307f\u305f<\/a><\/p><\/blockquote>\n<p><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"&#8220;ISP1807 Micro\u30dc\u30fc\u30c9\u306e\u6d88\u8cbb\u96fb\u6d41\u3092\u6e2c\u3063\u3066\u307f\u305f&#8221; &#8212; \u6771\u4eac\u304a\u6c17\u697d\u30ab\u30e1\u30e9\" src=\"https:\/\/okiraku-camera.tokyo\/blog\/?p=13365&#038;embed=true#?secret=AZSvy5e1lz#?secret=Omc6SsHj22\" data-secret=\"Omc6SsHj22\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6982\u8981 ISP1807(nRF52840) \u306b\u306f\u30c1\u30c3\u30d7\u6e29\u5ea6\u3092\u6e2c\u308b\u305f\u3081\u306e\u30bb\u30f3\u30b5\u30fcTEMP\u304c\u8f09\u3063\u3066\u3044\u308b\u306e\u3067\u3001\u305d\u306e\u6e2c\u5b9a\u7d50\u679c\u3092BLE\u3067\u30a2\u30c9\u30d0\u30bf\u30a4\u30ba\u3059\u308b\u30b9\u30b1\u30c3\u30c1\u3092\u4f5c\u6210\u3002 ESP32 Arduino core\u306b\u4ed8\u5c5e\u306e\u3044\u304f\u3064\u304b\u306e\u30b5\u30f3\u30d7\u30eb &hellip; <a href=\"https:\/\/okiraku-camera.tokyo\/blog\/?p=13307\" class=\"more-link\">\u7d9a\u304d\u3092\u8aad\u3080 <span class=\"screen-reader-text\">nRF52\u304b\u3089\u30a2\u30c9\u30d0\u30bf\u30a4\u30ba\u3057\u3066esp32\u3067\u30b9\u30ad\u30e3\u30f3\u3059\u308b<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[69],"tags":[65,165,84,164,167],"class_list":["post-13307","post","type-post","status-publish","format-standard","hentry","category-programming","tag-arduino","tag-ble","tag-esp32","tag-isp1807","tag-nrf52"],"_links":{"self":[{"href":"https:\/\/okiraku-camera.tokyo\/blog\/index.php?rest_route=\/wp\/v2\/posts\/13307","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/okiraku-camera.tokyo\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/okiraku-camera.tokyo\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/okiraku-camera.tokyo\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/okiraku-camera.tokyo\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=13307"}],"version-history":[{"count":0,"href":"https:\/\/okiraku-camera.tokyo\/blog\/index.php?rest_route=\/wp\/v2\/posts\/13307\/revisions"}],"wp:attachment":[{"href":"https:\/\/okiraku-camera.tokyo\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=13307"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/okiraku-camera.tokyo\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=13307"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/okiraku-camera.tokyo\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=13307"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}