{"id":3830,"date":"2021-11-18T22:14:49","date_gmt":"2021-11-18T13:14:49","guid":{"rendered":"https:\/\/androiphone.uvs.jp\/?p=3830"},"modified":"2024-06-13T00:03:42","modified_gmt":"2024-06-12T15:03:42","slug":"esp32-esp32%e3%81%ab%e7%99%ba%e8%a9%b1texttospeechtts%e3%81%95%e3%81%9b%e3%82%8b%e3%80%80%e3%82%b3%e3%83%bc%e3%83%87%e3%82%a3%e3%83%b3%e3%82%b0%e7%b7%a8","status":"publish","type":"post","link":"https:\/\/androiphone.uvs.jp\/?p=3830","title":{"rendered":"[ESP32] ESP32\u306b\u767a\u8a71(TextToSpeech[TTS])\u3055\u305b\u308b\u3000\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u7de8"},"content":{"rendered":"<hr \/>\n<p>\u97d3\u56fd\u306e<strong><span style=\"font-size: 14pt; color: #800000;\">STREET WOMAN FIGHTER<\/span><\/strong>\u3092\u89b3\u3066\u30d3\u30e8\u30f3\u30bb\u306eRun The World(Girl)\u304c\u982d\u304b\u3089\u96e2\u308c\u306a\u304f\u306a\u3063\u3066\u56f0\u3063\u3066\u3044\u307e\u3059w<\/p>\n<p><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/VBmMU_iwe6U\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<div class=\"linkcard\"><div class=\"lkc-internal-wrap\"><a class=\"lkc-link no_icon\" href=\"https:\/\/androiphone.uvs.jp\/?p=3809\" data-lkc-id=\"825\"><div class=\"lkc-card\"><div class=\"lkc-info\"><div class=\"lkc-favicon\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.google.com\/s2\/favicons?domain=androiphone.uvs.jp\" alt=\"\" width=\"16\" height=\"16\" \/><\/div><div class=\"lkc-domain\">ANDROIPHONE<\/div><div class=\"lkc-share\"> <div class=\"lkc-sns-hb\">2 Users<\/div><\/div><\/div><div class=\"lkc-content\"><figure class=\"lkc-thumbnail\"><img decoding=\"async\" class=\"lkc-thumbnail-img\" src=\"\/\/androiphone.uvs.jp\/wp-content\/uploads\/2021\/11\/51COgki6a5L._SL1000_-e1636102086490-150x150.jpg\" width=\"100px\" height=\"108px\" alt=\"\" \/><\/figure><div class=\"lkc-title\">[ESP32] ESP32\u306b\u767a\u8a71(TextToSpeech[TTS])\u3055\u305b\u308b\u3000\u63a5\u7d9a\u7de8<\/div><div class=\"lkc-date\">&#x1f552;&#xfe0f;2021\u5e7411\u67089\u65e5<\/div><div class=\"lkc-excerpt\">ESP32\u5358\u4f53\u3067\u97f3\u3092\u51fa\u529b\u3059\u308b(ESP8266Audio)\u524d\u306bDFPlayer\u3092\u4f7f\u3063\u3066\u97f3\u306e\u518d\u751f\u3092\u3057\u307e\u3057\u305f\u3002\u3057\u304b\u3057\u3001\u3053\u306e\u65b9\u6cd5\u306f\u3067\u306f\u3001\u3042\u3089\u304b\u3058\u3081\u6c7a\u3081\u3089\u308c\u305f\u56fa\u5b9a\u306emp3\u30fbwav\u30d5\u30a1\u30a4\u30eb\u306e\u518d\u751f\u3057\u304b\u3067\u304d\u306a\u3044\u3067\u3059\u3002 \t\u30cd\u30c3\u30c8\u304b\u3089\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066mp3\u3092\u518d\u751f\u3059\u308b \t\u30cd\u30c3\u30c8\u304b\u3089\u76f4\u63a5\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u518d\u751f\u3059\u308b\u3053\u308c\u3092\u3059\u308b\u306b\u306fESP8266Audio\u3068\u3044\u3046\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u7528\u3044\u3066ESP32\u306b\u518d\u751f\u3055\u305b\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002ESP8266Audio\u3067\u306fI2S\u3092\u7528\u3044\u3066\u5916\u90e8\u306e\u30a2\u30f3\u30d7\u30e2\u30b8\u30e5\u30fc\u30eb\u3067\u518d\u751f\u3059\u308b\u3053\u3068\u3092\u52e7\u3081\u3066\u3044\u307e\u3059https:\/\/www.amazon.co.jp\/Youmile-%E3%82%AA%E3%83%BC%E3%83%87%E3%82%A3%E3%82%AA%E3%83%91%E3%...<\/div><\/div><div class=\"clear\"><\/div><\/div><\/a><\/div><\/div>\n<p>\u3053\u306e\u7d9a\u304d\u306b\u306a\u308a\u307e\u3059<\/p>\n<hr \/>\n<p><strong><span style=\"font-size: 24pt; color: #ff6600;\">\u3055\u3066\u3001\u3069\u3046\u3084\u3063\u3066TTS\u3055\u305b\u308b\uff1f<\/span><\/strong><\/p>\n<p>\u307e\u3041\u305d\u3093\u306a\u3053\u3068\u306f\u3044\u3044\u3068\u3057\u3066\u3001\u6700\u521d\u306b\u601d\u3044\u3064\u3044\u305f\u306e\u304cGoogleTTS\u3092\u4f7f\u3063\u305f\u65b9\u6cd5\u3067\u3059\u3002<\/p>\n<div class=\"linkcard\"><div class=\"lkc-external-wrap\"><a class=\"lkc-link no_icon\" href=\"https:\/\/qiita.com\/horihiro\/items\/d64b699d06605ad44646\" data-lkc-id=\"826\" target=\"_blank\" rel=\"external noopener\"><div class=\"lkc-card\"><div class=\"lkc-info\"><div class=\"lkc-favicon\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.google.com\/s2\/favicons?domain=qiita.com\" alt=\"\" width=\"16\" height=\"16\" \/><\/div><div class=\"lkc-domain\">Qiita<\/div><div class=\"lkc-share\"> <div class=\"lkc-sns-po\">5 Pockets<\/div><\/div><\/div><div class=\"lkc-content\"><figure class=\"lkc-thumbnail\"><img decoding=\"async\" class=\"lkc-thumbnail-img\" src=\"https:\/\/s.wordpress.com\/mshots\/v1\/https%3A%2F%2Fqiita.com%2Fhorihiro%2Fitems%2Fd64b699d06605ad44646?w=100\" width=\"100px\" height=\"108px\" alt=\"\" \/><\/figure><div class=\"lkc-title\">Google \u7ffb\u8a33\u3092\u4f7f\u3063\u3066\u3001ESP8266 \u3067 TextToSpeech \u3059\u308b\u30e9\u30a4\u30d6\u30e9\u30ea - Qiita<\/div><div class=\"lkc-url\" title=\"https:\/\/qiita.com\/horihiro\/items\/d64b699d06605ad44646\">https:\/\/qiita.com\/horihiro\/items\/d64b699d06605ad44646<\/div><div class=\"lkc-excerpt\">\u5b9f\u969b\u306b\u306f\u3001ESP8266 \u306f\u558b\u3089\u306a\u3044\u306e\u3067\u3001\u30bf\u30a4\u30c8\u30eb\u8a50\u6b3a\u3067\u3059\u3002\u3067\u304d\u308b\u3053\u3068\u7e70\u308a\u8fd4\u3057\u307e\u3059\u304c\u3001ESP8266 \u306f\u4e00\u8a00\u3082\u558b\u308a\u307e\u305b\u3093\u3002Google \u7ffb\u8a33\u3092\u4f7f\u3063\u3066\u3001\u558b\u3089\u305b\u305f\u3044\u30c6\u30ad\u30b9\u30c8\u304b\u3089\u3001\u97f3\u58f0\u30d5\u30a1\u30a4\u30eb (mp3) \u306e URL \u3092\u4f5c\u308b\u3060\u3051...<\/div><\/div><div class=\"clear\"><\/div><\/div><\/a><\/div><\/div>\n<p>\u4e0a\u306e\u30d6\u30ed\u30b0\u306f\u4e88\u3081\u8aad\u3093\u3067\u3044\u305f\u306e\u3067\u3001\u3053\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u4f7f\u3063\u3066\u751f\u6210\u3057\u305fURL\u3092ESP8266Audio\u306e\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0URL\u306b\u98df\u308f\u305b\u308c\u3070TTS\u5b8c\u4e86\u3063\u3068<\/p>\n<blockquote><p><span style=\"color: #0000ff;\"><strong><span style=\"font-size: 18pt;\">\u3046\u306fww\u3088\u3086\u30fc\u3058\u3083\u3093www<\/span><\/strong><\/span><\/p><\/blockquote>\n<p>\u3063\u3068\u601d\u3063\u3066\u305f\u6642\u671f\u3082\u3042\u308a\u307e\u3057\u305f\u3002<\/p>\n<p>\u304c\u2026\u5b9f\u969b\u306b\u3084\u3063\u3066\u307f\u308b\u3068\u518d\u751f\u306f\u3059\u308b\u3093\u3067\u3059\u304c\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u304c\u6b62\u307e\u3089\u305a\u30ce\u30a4\u30ba\u3092\u518d\u751f\u3057\u7d9a\u3051\u3066\u30af\u30e9\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002ESP8266Audio\u306eissues\u306b\u3082\u8f09\u3063\u3066\u3044\u307e\u3057\u305f\u3002<\/p>\n<div class=\"linkcard\"><div class=\"lkc-external-wrap\"><a class=\"lkc-link no_icon\" href=\"https:\/\/github.com\/earlephilhower\/ESP8266Audio\/issues\/395\" data-lkc-id=\"827\" target=\"_blank\" rel=\"external noopener\"><div class=\"lkc-card\"><div class=\"lkc-info\"><div class=\"lkc-favicon\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.google.com\/s2\/favicons?domain=github.com\" alt=\"\" width=\"16\" height=\"16\" \/><\/div><div class=\"lkc-domain\">GitHub<\/div><\/div><div class=\"lkc-content\"><figure class=\"lkc-thumbnail\"><img decoding=\"async\" class=\"lkc-thumbnail-img\" src=\"\/\/androiphone.uvs.jp\/wp-content\/uploads\/pz-linkcard\/cache\/c87cb8b3f95e24ad1e0a41d138e71ca0a11933ae53d81909137942ef7d1c6786.jpeg\" width=\"100px\" height=\"108px\" alt=\"\" \/><\/figure><div class=\"lkc-title\">when play google TTS 2 or 3 times, it crashes \u00b7 Issue #395 \u00b7 earlephilhower\/E...<\/div><div class=\"lkc-url\" title=\"https:\/\/github.com\/earlephilhower\/ESP8266Audio\/issues\/395\">https:\/\/github.com\/earlephilhower\/ESP8266Audio\/issues\/395<\/div><div class=\"lkc-excerpt\">Hi When I use AudioFileSourceICYStream to play google TTS voice 2 or 3 times, it will crash! I try to increase the buffer size, but it still not works. TTS code here: i2sFile = new AudioFileSourceH...<\/div><\/div><div class=\"clear\"><\/div><\/div><\/a><\/div><\/div>\n<p>\u7406\u7531\u306f\u308f\u304b\u308a\u307e\u305b\u3093\u304c\u3001\u3069\u3046\u3084\u3089Google TTS\u306e\u4ed5\u69d8\u306e\u3088\u3046\u306a\u306e\u3067\u8ae6\u3081\u307e\u3059\u3002\u4ee3\u66ff\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u63a2\u3057\u3066\u3044\u308b\u3068Sound Of Text\u3068\u3044\u3046\u3082\u306e\u3092\u898b\u3064\u3051\u307e\u3057\u305f\u3002<\/p>\n<hr \/>\n<p><strong><span style=\"font-size: 24pt; color: #ff6600;\">Sound Of Text\u3068\u306f<\/span><\/strong><\/p>\n<div class=\"linkcard\"><div class=\"lkc-external-wrap\"><a class=\"lkc-link no_icon\" href=\"https:\/\/soundoftext.com\" data-lkc-id=\"828\" target=\"_blank\" rel=\"external noopener\"><div class=\"lkc-card\"><div class=\"lkc-info\"><div class=\"lkc-favicon\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.google.com\/s2\/favicons?domain=soundoftext.com\" alt=\"\" width=\"16\" height=\"16\" \/><\/div><div class=\"lkc-domain\">soundoftext.com<\/div><div class=\"lkc-share\"> <div class=\"lkc-sns-hb\">67 Users<\/div> <div class=\"lkc-sns-po\">493 Pockets<\/div><\/div><\/div><div class=\"lkc-content\"><figure class=\"lkc-thumbnail\"><img decoding=\"async\" class=\"lkc-thumbnail-img\" src=\"https:\/\/s.wordpress.com\/mshots\/v1\/https%3A%2F%2Fsoundoftext.com?w=100\" width=\"100px\" height=\"108px\" alt=\"\" \/><\/figure><div class=\"lkc-title\">Sound of Text<\/div><div class=\"lkc-url\" title=\"https:\/\/soundoftext.com\">https:\/\/soundoftext.com<\/div><\/div><div class=\"clear\"><\/div><\/div><\/a><\/div><\/div>\n<p>web\u4e0a\u3067\u30c6\u30ad\u30b9\u30c8\u3092\u5165\u529b\u3057\u3066mp3\u3092\u751f\u6210\u3067\u304d\u308b\u30b5\u30a4\u30c8\u3067\u3059\u3002\u3069\u3046\u3084\u3089\u751f\u6210\u306b\u306fGoogleTTS\u3092\u5229\u7528\u3057\u3066\u3044\u308b\u3088\u3046\u3067\u3001\u305d\u3053\u305d\u3053\u6709\u540d\u3089\u3057\u3044\u3067\u3059\u3002<strong><span style=\"font-size: 14pt; color: #ff0000;\">\u591a\u8a00\u8a9e\u5bfe\u5fdc<\/span><\/strong>\u3068\u3044\u3046\u70b9\u3067\u3007\u3002\u5b9f\u969b\u751f\u6210\u3057\u305fURL\u3092ESP8266Audio\u306b\u98df\u308f\u305b\u3066\u307f\u305f(https-&gt;http\u3078\u5909\u3048\u305f)\u3068\u3053\u308d\u3001\u3061\u3083\u3093\u3068\u518d\u751f\u3067\u304d\u3066\u3044\u307e\u3057\u305f\u3002\u30a4\u30b1\u305d\u3046\u3067\u3059\uff01<\/p>\n<p>\u3057\u304b\u3082\u3053\u306e\u30b5\u30a4\u30c8\u306fAPI\u3092\u516c\u958b\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<div class=\"linkcard\"><div class=\"lkc-external-wrap\"><a class=\"lkc-link no_icon\" href=\"https:\/\/soundoftext.com\/docs\" data-lkc-id=\"829\" target=\"_blank\" rel=\"external noopener\"><div class=\"lkc-card\"><div class=\"lkc-info\"><div class=\"lkc-favicon\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.google.com\/s2\/favicons?domain=soundoftext.com\" alt=\"\" width=\"16\" height=\"16\" \/><\/div><div class=\"lkc-domain\">soundoftext.com<\/div><\/div><div class=\"lkc-content\"><figure class=\"lkc-thumbnail\"><img decoding=\"async\" class=\"lkc-thumbnail-img\" src=\"https:\/\/s.wordpress.com\/mshots\/v1\/https%3A%2F%2Fsoundoftext.com%2Fdocs?w=100\" width=\"100px\" height=\"108px\" alt=\"\" \/><\/figure><div class=\"lkc-title\">Sound of Text<\/div><div class=\"lkc-url\" title=\"https:\/\/soundoftext.com\/docs\">https:\/\/soundoftext.com\/docs<\/div><\/div><div class=\"clear\"><\/div><\/div><\/a><\/div><\/div>\n<p>\u6d41\u308c\u3068\u3057\u3066\u306f<\/p>\n<ol>\n<li><strong><span style=\"font-size: 14pt; color: #008000;\">POST \/sounds\u3067ID\u53d6\u5f97\u3001mp3\u751f\u6210\u8981\u6c42<\/span><\/strong><\/li>\n<li><strong><span style=\"font-size: 14pt; color: #008000;\">GET \/sounds\/:id\u3067mp3\u306eURL\u3092\u53d6\u5f97<\/span><\/strong><\/li>\n<li><strong><span style=\"font-size: 14pt; color: #008000;\">URL\u3092ESP8266Audio\u306b\u6e21\u3057\u3066\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u518d\u751f<\/span><\/strong><\/li>\n<\/ol>\n<p>\u3067\u3059\u3002\u4e00\u3064\u305a\u3064\u5b9f\u88c5\u3057\u3066\u3044\u3051\u3070\u5927\u4e08\u592b\u305d\u3046\u3067\u3059<\/p>\n<hr \/>\n<p><span style=\"color: #ff6600;\"><strong><span style=\"font-size: 24pt;\">HTTPS\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u6e96\u5099<br \/>\n<\/span><\/strong><\/span><\/p>\n<p><a href=\"https:\/\/androiphone.uvs.jp\/wp-content\/uploads\/2021\/11\/SnapCrab_NoName_2021-11-18_11-16-24_No-00.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3837\" src=\"https:\/\/androiphone.uvs.jp\/wp-content\/uploads\/2021\/11\/SnapCrab_NoName_2021-11-18_11-16-24_No-00-244x300.jpg\" alt=\"\" width=\"291\" height=\"358\" srcset=\"https:\/\/androiphone.uvs.jp\/wp-content\/uploads\/2021\/11\/SnapCrab_NoName_2021-11-18_11-16-24_No-00-244x300.jpg 244w, https:\/\/androiphone.uvs.jp\/wp-content\/uploads\/2021\/11\/SnapCrab_NoName_2021-11-18_11-16-24_No-00-834x1024.jpg 834w, https:\/\/androiphone.uvs.jp\/wp-content\/uploads\/2021\/11\/SnapCrab_NoName_2021-11-18_11-16-24_No-00-768x943.jpg 768w, https:\/\/androiphone.uvs.jp\/wp-content\/uploads\/2021\/11\/SnapCrab_NoName_2021-11-18_11-16-24_No-00-1250x1536.jpg 1250w, https:\/\/androiphone.uvs.jp\/wp-content\/uploads\/2021\/11\/SnapCrab_NoName_2021-11-18_11-16-24_No-00.jpg 1331w\" sizes=\"auto, (max-width: 291px) 100vw, 291px\" \/><\/a><\/p>\n<p>JSON\u3067\u30ea\u30af\u30a8\u30b9\u30c8\u3057\u3066JSON\u3067\u53d7\u3051\u53d6\u308b\u306e\u3067\u3001\u305d\u3093\u306a\u306b\u96e3\u3057\u304f\u306f\u306a\u3044\u3067\u3059\u304c\u3001\u3053\u306eAPI\u306fhttps\u306a\u3093\u3067\u3059\u3088\u306d\u2026\u30c0\u30e1\u3082\u3068\u3067http\u306b\u5909\u3048\u3066REST\u3067\u30ea\u30af\u30a8\u30b9\u30c8\u3057\u3066\u307f\u305f\u3068\u3053\u308d<\/p>\n<p><a href=\"https:\/\/androiphone.uvs.jp\/wp-content\/uploads\/2021\/11\/SnapCrab_NoName_2021-11-18_11-22-55_No-00.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-3838\" src=\"https:\/\/androiphone.uvs.jp\/wp-content\/uploads\/2021\/11\/SnapCrab_NoName_2021-11-18_11-22-55_No-00-300x251.jpg\" alt=\"\" width=\"300\" height=\"251\" srcset=\"https:\/\/androiphone.uvs.jp\/wp-content\/uploads\/2021\/11\/SnapCrab_NoName_2021-11-18_11-22-55_No-00-300x251.jpg 300w, https:\/\/androiphone.uvs.jp\/wp-content\/uploads\/2021\/11\/SnapCrab_NoName_2021-11-18_11-22-55_No-00-1024x856.jpg 1024w, https:\/\/androiphone.uvs.jp\/wp-content\/uploads\/2021\/11\/SnapCrab_NoName_2021-11-18_11-22-55_No-00-768x642.jpg 768w, https:\/\/androiphone.uvs.jp\/wp-content\/uploads\/2021\/11\/SnapCrab_NoName_2021-11-18_11-22-55_No-00.jpg 1076w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>308 Permanent Redirect\u3067https\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3068\u3044\u3046\u3053\u3068\u306f\u7d50\u5c40\u3001ESP32\u3067https\u63a5\u7d9a\u3092\u3057\u306a\u3044\u3068\u306a\u3089\u306a\u3044\u3067\u3059\u3002esp32\u3067https\u63a5\u7d9a\u306f\u9045\u3044\u3057\u3001\u8a3c\u660e\u66f8\u306f\u5165\u308c\u3068\u304b\u306a\u3044\u3068\u30c0\u30e1\u3068\u304b\u3067\u3001\u6c17\u304c\u9032\u307f\u307e\u305b\u3093\u304c\u4ed5\u65b9\u304c\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\n<div class=\"linkcard\"><div class=\"lkc-internal-wrap\"><a class=\"lkc-link no_icon\" href=\"https:\/\/androiphone.uvs.jp\/?p=3218\" data-lkc-id=\"624\"><div class=\"lkc-card\"><div class=\"lkc-info\"><div class=\"lkc-favicon\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.google.com\/s2\/favicons?domain=androiphone.uvs.jp\" alt=\"\" width=\"16\" height=\"16\" \/><\/div><div class=\"lkc-domain\">ANDROIPHONE<\/div><div class=\"lkc-share\"> <div class=\"lkc-sns-po\">1 Pocket<\/div><\/div><\/div><div class=\"lkc-content\"><figure class=\"lkc-thumbnail\"><img decoding=\"async\" class=\"lkc-thumbnail-img\" src=\"\/\/androiphone.uvs.jp\/wp-content\/uploads\/2020\/06\/img_1507-150x150.png\" width=\"100px\" height=\"108px\" alt=\"\" \/><\/figure><div class=\"lkc-title\">[ESP8266] LINE Notify\u3092\u4f7f\u3046\u305f\u3081HTTPS(WiFiClientSecure)\u63a5\u7d9a\u306b\u306f\u307e\u3063\u305f\u8a71<\/div><div class=\"lkc-date\">&#x1f552;&#xfe0f;2020\u5e746\u67081\u65e5<\/div><div class=\"lkc-excerpt\">ESP8266\u3092\u4f7f\u3063\u305f\u69d8\u3005\u306a\u901a\u77e5\u3044\u307e\u3001\u30cd\u30c3\u30c8\u306b\u6563\u3089\u3070\u3063\u3066\u308b\u69d8\u3005\u306a\u30bb\u30f3\u30b7\u30f3\u30b0\u65b9\u6cd5\u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3057\u3066\u81ea\u4f5c\u306e\u30db\u30fc\u30e0\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092ESP8266\u3067\u4f5c\u3063\u3066\u3044\u305f\u3093\u3067\u3059\u3051\u3069\u3001\u4f5c\u308a\u3053\u3093\u3067\u304b\u3089\u3001ESP32\u306e\u307b\u3046\u304c\u826f\u304b\u3063\u305f\u306e\u3067\u306f\u30fb\u30fb\u30fb\uff1f\u3068\u601d\u3044\u3064\u3064\u5f8c\u306b\u306f\u5f15\u3051\u306a\u3044\u72b6\u614b\u3068\u306a\u3063\u3066\u3044\u307e\u3059w\u3002\u30db\u30fc\u30e0\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092\u5b9f\u73fe\u3059\u308b\u305f\u3081\u306b\u306f\u7570\u5e38\u304c\u3042\u3063\u305f\u6642\u300c\u30a2\u30e9\u30fc\u30e0(\u8b66\u5831\u97f3)\u3092\u9cf4\u3089\u3059\u300d\u7b49\u306e\u81ea\u5f8b\u7684\u306a\u52d5\u4f5c\u306e\u307b\u304b\u306b\u3001\u3054\u4e3b\u4eba\u69d8\u306e\u643a\u5e2f\u7aef\u672b\u306b\u30a2\u30e9\u30fc\u30c8\u306a\u3069\u3001\u901f\u3084\u304b\u306b\u60c5\u5831\u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af\u3059\u308b\u5fc5\u8981\u304c\u51fa\u3066\u304d\u307e\u3059\u3002\u901a\u77e5\u3092\u3059\u308b\u4e0a\u3067\u53ef\u80fd\u6027\u304c\u3042\u308b\u306e\u306f \t\u96fb\u8a71\u3092\u304b\u3051\u308b \tSMS\u3092\u9001\u308a\u4ed8\u3051\u308b \t\u30e1\u30fc\u30eb...<\/div><\/div><div class=\"clear\"><\/div><\/div><\/a><\/div><\/div>\n<p>ESP8266\u306e\u6642\u3082https\u3067\u3044\u3044\u601d\u3044\u51fa\u304c\u3042\u308a\u307e\u305b\u3093\u2026\u30cf\u30a1\u2026\u307e\u305a\u306f\u30eb\u30fc\u30c8\u8a3c\u660e\u66f8\u3092\u53d6\u5f97\u3059\u308b\u3053\u3068\u304b\u3089\u59cb\u3081\u307e\u3059\u3002<\/p>\n<div class=\"linkcard\"><div class=\"lkc-external-wrap\"><a class=\"lkc-link no_icon\" href=\"https:\/\/www.mgo-tec.com\/blog-entry-arduino-esp32-ssl-stable-root-ca.html\/2\" data-lkc-id=\"830\" target=\"_blank\" rel=\"external noopener\"><div class=\"lkc-card\"><div class=\"lkc-info\"><div class=\"lkc-favicon\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.google.com\/s2\/favicons?domain=www.mgo-tec.com\" alt=\"\" width=\"16\" height=\"16\" \/><\/div><div class=\"lkc-domain\">mgo-tec\u96fb\u5b50\u5de5\u4f5c<\/div><div class=\"lkc-share\"> <div class=\"lkc-sns-x\">2 Posts<\/div> <div class=\"lkc-sns-po\">19 Pockets<\/div><\/div><\/div><div class=\"lkc-content\"><figure class=\"lkc-thumbnail\"><img decoding=\"async\" class=\"lkc-thumbnail-img\" src=\"\/\/androiphone.uvs.jp\/wp-content\/uploads\/pz-linkcard\/cache\/fa19ee91d2502570bac1da80b0944d0af17786c7637d5b3bfdb67fa1446736be.jpeg\" width=\"100px\" height=\"108px\" alt=\"\" \/><\/figure><div class=\"lkc-title\">Arduino \u2013 ESP32 WiFiClientSecure \u30e9\u30a4\u30d6\u30e9\u30ea\u3067\u3001\u5b89\u5b9a\u3057\u3066 https ( SSL )\u8a18\u4e8b\u3092GE...<\/div><div class=\"lkc-url\" title=\"https:\/\/www.mgo-tec.com\/blog-entry-arduino-esp32-ssl-stable-root-ca.html\/2\">https:\/\/www.mgo-tec.com\/blog-entry-arduino-esp32-ssl-stable-root-ca.html\/2<\/div><div class=\"lkc-excerpt\">Arduino - ESP32 \u306e WiFiClientSecure \u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u4f7f\u3063\u3066\u3001SSL ( https )\u30da\u30fc\u30b8\u304b\u3089\u8a18\u4e8b\u3092\u53d6\u5f97\u3059\u308b\u3053\u3068\u304c\u5b89\u5b9a\u3057\u3066\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u30eb\u30fc\u30c8\u8a3c\u660e\u66f8\u8a2d\u5b9a\u65b9\u6cd5\u3092\u52c9\u5f37\u3059\u308b\u3053\u3068\u306b\u3088\u308a\u3001SSL\u901a\u4fe1\u304c\u5c11\u3057\u5206\u304b\u3063\u3066\u6765\u307e\u3059\u3002\u30b5\u30fc\u30d0\u30fc\u304b\u3089\u9001\u3089\u308c\u308b\u30c7\u30fc\u30bf\u3092\u4f59\u3059\u3053\u3068\u306a\u304f\u53d7\u4fe1\u3059\u308b\u3053\u3068\u304c\u5927\u4e8b\u3002<\/div><\/div><div class=\"clear\"><\/div><\/div><\/a><\/div><\/div>\n<div class=\"linkcard\"><div class=\"lkc-external-wrap\"><a class=\"lkc-link no_icon\" href=\"https:\/\/qiita.com\/minwinmin\/items\/55ba92edac3e1ec9f602\" data-lkc-id=\"831\" target=\"_blank\" rel=\"external noopener\"><div class=\"lkc-card\"><div class=\"lkc-info\"><div class=\"lkc-favicon\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.google.com\/s2\/favicons?domain=qiita.com\" alt=\"\" width=\"16\" height=\"16\" \/><\/div><div class=\"lkc-domain\">Qiita<\/div><div class=\"lkc-share\"> <div class=\"lkc-sns-po\">1 Pocket<\/div><\/div><\/div><div class=\"lkc-content\"><figure class=\"lkc-thumbnail\"><img decoding=\"async\" class=\"lkc-thumbnail-img\" src=\"https:\/\/s.wordpress.com\/mshots\/v1\/https%3A%2F%2Fqiita.com%2Fminwinmin%2Fitems%2F55ba92edac3e1ec9f602?w=100\" width=\"100px\" height=\"108px\" alt=\"\" \/><\/figure><div class=\"lkc-title\">ESP32\u304b\u3089WiFiClientSecure\u3092\u3064\u304b\u3063\u3066HTTPS GET\u3092\u3059\u308b\u65b9\u6cd5\u3092\u3061\u3087\u3063\u3068\u7406\u89e3\u3057\u305f - Qiita<\/div><div class=\"lkc-url\" title=\"https:\/\/qiita.com\/minwinmin\/items\/55ba92edac3e1ec9f602\">https:\/\/qiita.com\/minwinmin\/items\/55ba92edac3e1ec9f602<\/div><div class=\"lkc-excerpt\">\u306f\u3058\u3081\u306bESP32\u304b\u3089API\u3092GET\u3059\u308b\u3068\u304d\u3001HTTP\u306a\u3089\u7c21\u5358\u306b\u3067\u304d\u307e\u3057\u305f\u3002\u3057\u304b\u3057HTTPS\u306e\u5834\u5408\u3001\u306a\u304b\u306a\u304b\u4e0a\u624b\u304f\u3044\u304b\u305a\u624b\u9593\u53d6\u3063\u3066\u3057\u307e\u3063\u305f\u306e\u3067\u3001\u624b\u9806\u3092\u6b8b\u3057\u305f\u3044\u3068\u601d\u3044\u307e\u3059\u3002\u624b\u9593\u53d6\u3063\u305f\u90e8\u5206HTTPS\u306e\u5834\u5408\u3001CA\u8a3c\u660e\u66f8\u3092...<\/div><\/div><div class=\"clear\"><\/div><\/div><\/a><\/div><\/div>\n<p>\u4e0a\u306e\u8a18\u4e8b\u3092\u53c2\u8003\u306bSoundOfText\u306e\u8a3c\u660e\u66f8\u3092\u30d6\u30e9\u30a6\u30b6\u304b\u3089\u53d6\u5f97\u3057\u307e\u3059\u3002\u3061\u306a\u307f\u306b\u79c1\u306fESET\u306e\u30a6\u30a4\u30eb\u30b9\u5bfe\u7b56\u30bd\u30d5\u30c8\u3092\u5165\u308c\u3066\u3044\u308b\u306e\u3067\u3059\u304c\u3001\u8a3c\u660e\u66f8\u304cESET\u306b\u306a\u3063\u3066\u304a\u308a\u3001\u672c\u6765\u306e\u8a3c\u660e\u66f8\u3067\u306f\u306a\u3044\u3082\u306e\u3092\u4f7f\u3063\u3066<strong><span style=\"color: #0000ff; font-size: 14pt;\">\u30cf\u30de\u308a\u6642\u9593\u304c\u6eb6\u3051\u307e\u3057\u305f<\/span><\/strong>\u3002<\/p>\n<div class=\"linkcard\"><div class=\"lkc-external-wrap\"><a class=\"lkc-link no_icon\" href=\"https:\/\/kekaku.addisteria.com\/wp\/20190604024518\" data-lkc-id=\"832\" target=\"_blank\" rel=\"external noopener\"><div class=\"lkc-card\"><div class=\"lkc-info\"><div class=\"lkc-favicon\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.google.com\/s2\/favicons?domain=kekaku.addisteria.com\" alt=\"\" width=\"16\" height=\"16\" \/><\/div><div class=\"lkc-domain\">IT\u696d\u52d9\u3067\u4f7f\u3048\u308b\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30c6\u30af\u30cb\u30c3\u30af<\/div><div class=\"lkc-share\"> <div class=\"lkc-sns-hb\">3 Users<\/div> <div class=\"lkc-sns-po\">2 Pockets<\/div><\/div><\/div><div class=\"lkc-content\"><figure class=\"lkc-thumbnail\"><img decoding=\"async\" class=\"lkc-thumbnail-img\" src=\"\/\/androiphone.uvs.jp\/wp-content\/uploads\/pz-linkcard\/cache\/ce08ee83fbba0858f7646b7b78e92b2d692daa167c4a60578f83dc99d537c76e.jpeg\" width=\"100px\" height=\"108px\" alt=\"\" \/><\/figure><div class=\"lkc-title\">\u30d6\u30e9\u30a6\u30b6\u3067\u307f\u308bSSL\u8a3c\u660e\u66f8\u60c5\u5831\u304c\u30a6\u30a3\u30eb\u30b9\u5bfe\u7b56\u30bd\u30d5\u30c8\u306b\u306a\u3089\u306a\u3044\u3088\u3046\u306b\u3059\u308b\u8a2d\u5b9a\uff08ESET...<\/div><div class=\"lkc-url\" title=\"https:\/\/kekaku.addisteria.com\/wp\/20190604024518\">https:\/\/kekaku.addisteria.com\/wp\/20190604024518<\/div><div class=\"lkc-excerpt\">\u3053\u3093\u3070\u3093\u306f\u3002\u30d6\u30ed\u30b0\u3092\u3084\u3063\u3066\u3044\u305f\u308a\u3001\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u306e\u958b\u767a\u3092\u3057\u3066\u3044\u308b\u3068\u3001SSL\u5316\u304c\u91cd\u8981\u3067\u3059\u3088\u306d\u3002\u305d\u3057\u3066\u671f\u9650\u4ed8\u304d\u306eSSL\u8a3c\u660e\u66f8\u3092\u53d6\u5f97\u3057\u3066\u3044\u308b\u5834\u5408\u3001\u3042\u3068\u3069\u308c\u304f\u3089\u3044SSL\u8a3c\u660e\u66f8\u306e\u671f\u9593\u304c\u6b8b\u3063\u3066\u3044\u308b\u304b\u3001\u305d\u3057\u3066\u671f\u9650\u304c\u5207\u308c\u3066\u3044\u306a\u3044\u304b\u3001\u6c17\u306b\u306a\u308b\u3068\u3053\u308d\u3067\u3059\u3088\u306d\u3002\u3057<\/div><\/div><div class=\"clear\"><\/div><\/div><\/a><\/div><\/div>\n<p>\u307b\u304b\u306e\u30a6\u30a4\u30eb\u30b9\u5bfe\u7b56\u30bd\u30d5\u30c8\u306f\u308f\u304b\u308a\u307e\u305b\u3093\u304c\u3001\u4e0a\u306e\u8a18\u4e8b\u3092\u53c2\u8003\u306bESET\u3067\u3042\u308c\u3070\u7121\u52b9\u306b\u3057\u3068\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n<div class=\"linkcard\"><div class=\"lkc-external-wrap\"><a class=\"lkc-link no_icon\" href=\"https:\/\/intellectualcuriosity.hatenablog.com\/entry\/2021\/07\/11\/030335\" data-lkc-id=\"833\" target=\"_blank\" rel=\"external noopener\"><div class=\"lkc-card\"><div class=\"lkc-info\"><div class=\"lkc-favicon\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.google.com\/s2\/favicons?domain=intellectualcuriosity.hatenablog.com\" alt=\"\" width=\"16\" height=\"16\" \/><\/div><div class=\"lkc-domain\">\u77e5\u7684\u597d\u5947\u5fc3 for IoT<\/div><div class=\"lkc-share\"> <div class=\"lkc-sns-hb\">1 User<\/div> <div class=\"lkc-sns-po\">1 Pocket<\/div><\/div><\/div><div class=\"lkc-content\"><figure class=\"lkc-thumbnail\"><img decoding=\"async\" class=\"lkc-thumbnail-img\" src=\"\/\/androiphone.uvs.jp\/wp-content\/uploads\/pz-linkcard\/cache\/f8b5fa526641a1e14152d9679a8da738ebecb879cfc2d0029879663f08c26d86.jpeg\" width=\"100px\" height=\"108px\" alt=\"\" \/><\/figure><div class=\"lkc-title\">SSLClient\u306f\u8a3c\u660e\u66f8\u60c5\u5831\u3092\u81ea\u52d5\u3067\u4f5c\u308b\u30b5\u30a4\u30c8\u304c\u7528\u610f\u3055\u308c\u3066\u3044\u3066\u3001ESP32\u3067\u6a19\u6e96\u306eWiFiCli...<\/div><div class=\"lkc-url\" title=\"https:\/\/intellectualcuriosity.hatenablog.com\/entry\/2021\/07\/11\/030335\">https:\/\/intellectualcuriosity.hatenablog.com\/entry\/2021\/07\/11\/030335<\/div><div class=\"lkc-excerpt\">\u96fb\u6ce2\u72b6\u6cc1\u306e\u826f\u304f\u306a\u3044\u5834\u6240\u304b\u3089\u30c7\u30fc\u30bf\u3092\u9001\u4fe1\u3059\u308b\u5fc5\u8981\u304c\u3042\u3063\u305f\u305f\u3081\u3001M5Stack Basic\u306bLAN\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u4ed8\u3051\u3066\u6709\u7dda\u3067\u30c7\u30fc\u30bf\u3092\u9001\u4fe1\u3059\u308b\u3053\u3068\u306b\u3057\u305f\u3093\u3067\u3059\u3002 \u30c7\u30fc\u30bf\u306e\u9001\u4fe1\u5148\u30b5\u30a4\u30c8\u304chttps\u30a2\u30af\u30bb\u30b9\u3060\u3063\u305f\u306e\u3067\u3001\u30bb\u30ad\u30e5\u30a2\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3092\u4f7f\u3046\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u3092\u3057\u3088\u3046\u3068\u601d\u3063\u305f\u3068\u3053\u308d\u3067\u6c17\u304c\u4ed8\u304d\u307e\u3057\u305f\u3002 \u3044\u307e\u307e\u3067ESP32\u3067\u4f7f\u3063\u3066\u3044\u305fWiFiClientSecure\u30e9\u30a4\u30d6\u30e9\u30ea\u306f\u540d\u524d\u306e\u901a\u308aWiFi\u7528\u3060\u3068\u3044\u3046\u3053\u3068\u306b\uff01 \u305d\u306e\u305f\u3081\u3001LAN\u3067\u30bb\u30ad\u30e5\u30a2\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304c\u4f7f\u3048\u308b\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u63a2\u3059\u3053\u3068\u306b\u306a\u308a\u3001\u6700\u7d42\u7684\u306b\u4f7f\u3046\u3053\u3068\u306b\u3057\u305f\u306e\u304cOPEnSLab-OSU\/SSLClient\u3067\u3059\u3002 SSLClient\u306fESP8266\u3067...<\/div><\/div><div class=\"clear\"><\/div><\/div><\/a><\/div><\/div>\n<p>\u5f8c\u304b\u3089\u77e5\u3063\u305f\u306e\u3067\u3059\u304c\u3001\u4e0a\u306e\u8a18\u4e8b\u306e\u300c<span style=\"font-size: 14pt; color: #0000ff;\">WiFiClientSecure\u7528\u306e\u7c21\u5358\u306a\u8a3c\u660e\u66f8\u306e\u53d6\u5f97\u65b9\u6cd5<\/span>\u300d\u3067\u30eb\u30fc\u30c8\u8a3c\u660e\u66f8\u3092\u53d6\u308b\u65b9\u6cd5\u306e\u65b9\u304c\u7c21\u5358\u3067\u3044\u3044\u3067\u3059\u3002\u5148\u306b\u3053\u306e\u8a18\u4e8b\u3092\u8aad\u3093\u3067\u308c\u3070\u2026\u3068\u308a\u3042\u3048\u305a\u53d6\u5f97\u3067\u304d\u305f\u8a3c\u660e\u66f8\u306f\u4ee5\u4e0b\u3067\u3059\u3002<\/p>\n<pre class=\"lang:default decode:true\">const char* root_ca= \\\r\n\"-----BEGIN CERTIFICATE-----\\n\" \\\r\n\"MIIFFjCCAv6gAwIBAgIRAJErCErPDBinU\/bWLiWnX1owDQYJKoZIhvcNAQELBQAw\\n\" \\\r\n\"TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh\\n\" \\\r\n\"cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjAwOTA0MDAwMDAw\\n\" \\\r\n\"WhcNMjUwOTE1MTYwMDAwWjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg\\n\" \\\r\n\"RW5jcnlwdDELMAkGA1UEAxMCUjMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK\\n\" \\\r\n\"AoIBAQC7AhUozPaglNMPEuyNVZLD+ILxmaZ6QoinXSaqtSu5xUyxr45r+XXIo9cP\\n\" \\\r\n\"R5QUVTVXjJ6oojkZ9YI8QqlObvU7wy7bjcCwXPNZOOftz2nwWgsbvsCUJCWH+jdx\\n\" \\\r\n\"sxPnHKzhm+\/b5DtFUkWWqcFTzjTIUu61ru2P3mBw4qVUq7ZtDpelQDRrK9O8Zutm\\n\" \\\r\n\"NHz6a4uPVymZ+DAXXbpyb\/uBxa3Shlg9F8fnCbvxK\/eG3MHacV3URuPMrSXBiLxg\\n\" \\\r\n\"Z3Vms\/EY96Jc5lP\/Ooi2R6X\/ExjqmAl3P51T+c8B5fWmcBcUr2Ok\/5mzk53cU6cG\\n\" \\\r\n\"\/kiFHaFpriV1uxPMUgP17VGhi9sVAgMBAAGjggEIMIIBBDAOBgNVHQ8BAf8EBAMC\\n\" \\\r\n\"AYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMBIGA1UdEwEB\/wQIMAYB\\n\" \\\r\n\"Af8CAQAwHQYDVR0OBBYEFBQusxe3WFbLrlAJQOYfr52LFMLGMB8GA1UdIwQYMBaA\\n\" \\\r\n\"FHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcw\\n\" \\\r\n\"AoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzAnBgNVHR8EIDAeMBygGqAYhhZodHRw\\n\" \\\r\n\"Oi8veDEuYy5sZW5jci5vcmcvMCIGA1UdIAQbMBkwCAYGZ4EMAQIBMA0GCysGAQQB\\n\" \\\r\n\"gt8TAQEBMA0GCSqGSIb3DQEBCwUAA4ICAQCFyk5HPqP3hUSFvNVneLKYY611TR6W\\n\" \\\r\n\"PTNlclQtgaDqw+34IL9fzLdwALduO\/ZelN7kIJ+m74uyA+eitRY8kc607TkC53wl\\n\" \\\r\n\"ikfmZW4\/RvTZ8M6UK+5UzhK8jCdLuMGYL6KvzXGRSgi3yLgjewQtCPkIVz6D2QQz\\n\" \\\r\n\"CkcheAmCJ8MqyJu5zlzyZMjAvnnAT45tRAxekrsu94sQ4egdRCnbWSDtY7kh+BIm\\n\" \\\r\n\"lJNXoB1lBMEKIq4QDUOXoRgffuDghje1WrG9ML+Hbisq\/yFOGwXD9RiX8F6sw6W4\\n\" \\\r\n\"avAuvDszue5L3sz85K+EC4Y\/wFVDNvZo4TYXao6Z0f+lQKc0t8DQYzk1OXVu8rp2\\n\" \\\r\n\"yJMC6alLbBfODALZvYH7n7do1AZls4I9d1P4jnkDrQoxB3UqQ9hVl3LEKQ73xF1O\\n\" \\\r\n\"yK5GhDDX8oVfGKF5u+decIsH4YaTw7mP3GFxJSqv3+0lUFJoi5Lc5da149p90Ids\\n\" \\\r\n\"hCExroL1+7mryIkXPeFM5TgO9r0rvZaBFOvV2z0gp35Z0+L4WPlbuEjN\/lxPFin+\\n\" \\\r\n\"HlUjr8gRsI3qfJOQFy\/9rKIJR0Y\/8Omwt\/8oTWgy1mdeHmmjk7j1nYsvC9JSQ6Zv\\n\" \\\r\n\"MldlTTKB3zhThV1+XWYp6rjd5JW1zbVWEkLNxE7GJThEUG3szgBVGP7pSWTUTsqX\\n\" \\\r\n\"nLRbwHOoq7hHwg==\\n\" \\\r\n\"-----END CERTIFICATE-----\\n\";<\/pre>\n<hr \/>\n<p><strong><span style=\"font-size: 24pt; color: #ff6600;\">\u518d\u751f\u30b3\u30fc\u30c9\u306e\u5b9f\u88c5<\/span><\/strong><\/p>\n<p>\u3081\u3093\u3069\u3044\u306e\u3067\u3001\u3044\u304d\u306a\u308a\u5168\u30b3\u30fc\u30c9\u3044\u304d\u307e\u3059w\u3001SPIFFS\u306b\u306f0004.mp3\u30680001.mp3\u3092\u5165\u308c\u3068\u304d\u307e\u3059(\u52b9\u679c\u97f3\u306a\u3089\u306a\u3093\u3067\u3082)<\/p>\n<pre class=\"lang:default decode:true\">#include &lt;Arduino.h&gt;\r\n\r\n#ifdef ESP32\r\n    #include &lt;WiFi.h&gt;\r\n    #include \"SPIFFS.h\"\r\n#else\r\n    #include &lt;ESP8266WiFi.h&gt;\r\n#endif\r\n#include \"AudioFileSourceICYStream.h\"\r\n#include \"AudioFileSourceBuffer.h\"\r\n#include \"AudioGeneratorMP3.h\"\r\n#include \"AudioOutputI2SNoDAC.h\"\r\n#include \"AudioOutputI2S.h\"\r\n#include \"AudioFileSourceSPIFFS.h\"\r\n#include \"AudioFileSourceID3.h\"\r\n#include &lt;ArduinoJson.h&gt;\r\n\r\n\/\/SPIFFS\u306b\u5165\u308c\u3066\u304a\u304f\u52b9\u679c\u97f3\u3002\u5730\u9707\u8b66\u5831\u7528\u306a\u306e\u30672\u30d9\u30eb\u30681\u30d9\u30eb\u306e\u52b9\u679c\u97f3\u3092\u7528\u610f\r\n#define EFFECT_TWO_BELL \"\/0004.mp3\"\r\n#define EFFECT_ONE_BELL \"\/0001.mp3\"\r\n\r\n\/\/Wifi\u306e\u63a5\u7d9aSSID\u3068\u30d1\u30b9\r\nconst char* ssid = \"ssid\";\r\nconst char* password = \"pass\";\r\n\r\nconst String msg = \"\u7dca\u6025\u5730\u9707\u901f\u5831\u3001\u4e88\u5831\u3002\u51fd\u9928\u3001\u9707\u5ea62\u3002\u6700\u5927\u9707\u5ea6\u3001\u9707\u5ea65\u5f37\u3002\u30de\u30b0\u30cb\u30c1\u30e5\u30fc\u30c9\u30015.5\u3002\u9707\u6e90\u3001\u5bae\u57ce\u770c\u6c96\u3002\u6700\u7d42\u5831\u5f85\u3061\u3067\u3059\";\r\n\r\n\/\/SoundOfText\u306eURL\r\nconst char *host = \"https:\/\/api.soundoftext.com\/sounds\";\r\n\r\nStaticJsonDocument&lt;1024&gt; json_request;\r\nchar buffer[512];\r\n\r\nconst char* root_ca= \\\r\n\"-----BEGIN CERTIFICATE-----\\n\" \\\r\n\"MIIFFjCCAv6gAwIBAgIRAJErCErPDBinU\/bWLiWnX1owDQYJKoZIhvcNAQELBQAw\\n\" \\\r\n\"TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh\\n\" \\\r\n\"cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjAwOTA0MDAwMDAw\\n\" \\\r\n\"WhcNMjUwOTE1MTYwMDAwWjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg\\n\" \\\r\n\"RW5jcnlwdDELMAkGA1UEAxMCUjMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK\\n\" \\\r\n\"AoIBAQC7AhUozPaglNMPEuyNVZLD+ILxmaZ6QoinXSaqtSu5xUyxr45r+XXIo9cP\\n\" \\\r\n\"R5QUVTVXjJ6oojkZ9YI8QqlObvU7wy7bjcCwXPNZOOftz2nwWgsbvsCUJCWH+jdx\\n\" \\\r\n\"sxPnHKzhm+\/b5DtFUkWWqcFTzjTIUu61ru2P3mBw4qVUq7ZtDpelQDRrK9O8Zutm\\n\" \\\r\n\"NHz6a4uPVymZ+DAXXbpyb\/uBxa3Shlg9F8fnCbvxK\/eG3MHacV3URuPMrSXBiLxg\\n\" \\\r\n\"Z3Vms\/EY96Jc5lP\/Ooi2R6X\/ExjqmAl3P51T+c8B5fWmcBcUr2Ok\/5mzk53cU6cG\\n\" \\\r\n\"\/kiFHaFpriV1uxPMUgP17VGhi9sVAgMBAAGjggEIMIIBBDAOBgNVHQ8BAf8EBAMC\\n\" \\\r\n\"AYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMBIGA1UdEwEB\/wQIMAYB\\n\" \\\r\n\"Af8CAQAwHQYDVR0OBBYEFBQusxe3WFbLrlAJQOYfr52LFMLGMB8GA1UdIwQYMBaA\\n\" \\\r\n\"FHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcw\\n\" \\\r\n\"AoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzAnBgNVHR8EIDAeMBygGqAYhhZodHRw\\n\" \\\r\n\"Oi8veDEuYy5sZW5jci5vcmcvMCIGA1UdIAQbMBkwCAYGZ4EMAQIBMA0GCysGAQQB\\n\" \\\r\n\"gt8TAQEBMA0GCSqGSIb3DQEBCwUAA4ICAQCFyk5HPqP3hUSFvNVneLKYY611TR6W\\n\" \\\r\n\"PTNlclQtgaDqw+34IL9fzLdwALduO\/ZelN7kIJ+m74uyA+eitRY8kc607TkC53wl\\n\" \\\r\n\"ikfmZW4\/RvTZ8M6UK+5UzhK8jCdLuMGYL6KvzXGRSgi3yLgjewQtCPkIVz6D2QQz\\n\" \\\r\n\"CkcheAmCJ8MqyJu5zlzyZMjAvnnAT45tRAxekrsu94sQ4egdRCnbWSDtY7kh+BIm\\n\" \\\r\n\"lJNXoB1lBMEKIq4QDUOXoRgffuDghje1WrG9ML+Hbisq\/yFOGwXD9RiX8F6sw6W4\\n\" \\\r\n\"avAuvDszue5L3sz85K+EC4Y\/wFVDNvZo4TYXao6Z0f+lQKc0t8DQYzk1OXVu8rp2\\n\" \\\r\n\"yJMC6alLbBfODALZvYH7n7do1AZls4I9d1P4jnkDrQoxB3UqQ9hVl3LEKQ73xF1O\\n\" \\\r\n\"yK5GhDDX8oVfGKF5u+decIsH4YaTw7mP3GFxJSqv3+0lUFJoi5Lc5da149p90Ids\\n\" \\\r\n\"hCExroL1+7mryIkXPeFM5TgO9r0rvZaBFOvV2z0gp35Z0+L4WPlbuEjN\/lxPFin+\\n\" \\\r\n\"HlUjr8gRsI3qfJOQFy\/9rKIJR0Y\/8Omwt\/8oTWgy1mdeHmmjk7j1nYsvC9JSQ6Zv\\n\" \\\r\n\"MldlTTKB3zhThV1+XWYp6rjd5JW1zbVWEkLNxE7GJThEUG3szgBVGP7pSWTUTsqX\\n\" \\\r\n\"nLRbwHOoq7hHwg==\\n\" \\\r\n\"-----END CERTIFICATE-----\\n\";\r\n\r\nbool tts_flag = false;\r\nString location = \"\";\r\nbool isPlaying = false;\r\nString effect_mp3 = \"\";\r\nString tts_text = \"\";\r\nint tts_state = 0;  \/\/ 0:\u5f85\u6a5f 1:mp3url\u751f\u6210\u30ea\u30af\u30a8\u30b9\u30c8\u4e2d\u30002:\u518d\u751f\u4e2d\r\n\r\nAudioGeneratorMP3 *mp3;\r\nAudioFileSourceICYStream *file;\r\nAudioFileSourceBuffer *buff;\r\n\/\/AudioOutputI2SNoDAC *out;\r\nAudioOutputI2S *out;\r\n\r\nAudioFileSourceSPIFFS *file_effect;\r\nAudioFileSourceID3 *id3_effect;\r\n\r\n\/\/\u30d7\u30ed\u30c8\u30bf\u30a4\u30d7\u5ba3\u8a00\r\nString requestCreateTTS(String text);\r\nString isPreparedTTSMp3(String id,String&amp; location);\r\nbool playEffect();\r\nvoid subProcess(void * pvParameters);\r\n\r\n\r\n\/\/ Called when a metadata event occurs (i.e. an ID3 tag, an ICY block, etc.\r\nvoid MDCallback(void *cbData, const char *type, bool isUnicode, const char *string)\r\n{\r\n\/*  \r\n  const char *ptr = reinterpret_cast&lt;const char *&gt;(cbData);\r\n  (void) isUnicode; \/\/ Punt this ball for now\r\n  \/\/ Note that the type and string may be in PROGMEM, so copy them to RAM for printf\r\n  char s1[32], s2[64];\r\n  strncpy_P(s1, type, sizeof(s1));\r\n  s1[sizeof(s1)-1]=0;\r\n  strncpy_P(s2, string, sizeof(s2));\r\n  s2[sizeof(s2)-1]=0;\r\n  Serial.printf(\"METADATA(%s) '%s' = '%s'\\n\", ptr, s1, s2);\r\n  Serial.flush();\r\n*\/  \r\n}\r\n\r\n\/\/ Called when there's a warning or error (like a buffer underflow or decode hiccup)\r\nvoid StatusCallback(void *cbData, int code, const char *string)\r\n{\r\n\/*  \r\n  const char *ptr = reinterpret_cast&lt;const char *&gt;(cbData);\r\n  \/\/ Note that the string may be in PROGMEM, so copy it to RAM for printf\r\n  char s1[64];\r\n  strncpy_P(s1, string, sizeof(s1));\r\n  s1[sizeof(s1)-1]=0;\r\n  Serial.printf(\"STATUS(%s) '%d' = '%s'\\n\", ptr, code, s1);\r\n  Serial.flush();\r\n*\/\r\n}\r\n\r\n\r\nvoid initTTS(){\r\n  \/*\r\n  out = new AudioOutputI2SNoDAC();\r\n  out-&gt;SetPinout(26,25,5); \/\/  bclkPin = 26   wclkPin = 25   doutPin = 5\r\n  out-&gt;SetGain(3.999); \/\/ &lt;4.0\r\n  out-&gt;SetRate(44100);\r\n  out-&gt;SetBitsPerSample(16);\r\n  out-&gt;SetChannels(1); \r\n  *\/\r\n  out = new AudioOutputI2S();\r\n  out-&gt;SetPinout(26,25,15); \/\/  bclkPin = 26   wclkPin = 25   doutPin = 15\r\n  out-&gt;SetGain(0.03); \/\/ &lt;4.0 0.15Def\r\n  out-&gt;SetRate(44100);\r\n  out-&gt;SetBitsPerSample(16);\r\n  out-&gt;SetChannels(1);\r\n  \r\n  xTaskCreatePinnedToCore(subProcess, \"subProcess\", 8192, NULL, 25, NULL, 0); \/\/Core0\u3067\u3082Core1\u3067\u3082\u512a\u5148\u5ea6\u3082\u9069\u5b9c\u5909\u66f4\r\n}\r\n\r\nvoid speak_text(String text,String effect_f){\r\n  \/\/\u518d\u751f\u3057\u3066\u3044\u308c\u3070\u505c\u6b62\u3092\u3059\u308b\r\n  isPlaying = false;\r\n\r\n  \/\/tts_state = 0 \u306b\u306a\u308b\u307e\u3067\u5f85\u6a5f\r\n  Serial.print(\"[TTS] Wait tts_state reset\");\r\n  while(tts_state != 0){\r\n    Serial.print(\".\");\r\n    delay(100);\r\n  }\r\n  Serial.println(\"\");\r\n  Serial.println(\"[TTS] tts_state reset ok\");\r\n  \r\n  \/\/\u52b9\u679c\u97f3\u3068\u767a\u8a71\u5185\u5bb9\u3092\u30bb\u30c3\u30c8\r\n  effect_mp3 = effect_f;\r\n  tts_text = text;\r\n\r\n  \/\/SoundOfTest\u3078\u30ea\u30af\u30a8\u30b9\u30c8\u958b\u59cb\r\n  tts_state = 1;\r\n }\r\n\r\nbool playEffect(){\r\n\r\n  file_effect = new AudioFileSourceSPIFFS(effect_mp3.c_str());\r\n  id3_effect = new AudioFileSourceID3(file_effect);\r\n  mp3 = new AudioGeneratorMP3();\r\n  mp3-&gt;begin(id3_effect, out);\r\n  delay(50);\r\n}\r\n\r\n\/\/\u623b\u308a\u5024 Pedding:\u751f\u6210\u4e2d Done:\u5b8c\u4e86=&gt;location\u306bmp3\u306eurl Error:\u751f\u6210\u30a8\u30e9\u30fc\r\n\/\/ https:\/\/soundoftext.com\/docs\u53c2\u7167\r\nString isPreparedTTSMp3(String id,String&amp; location){\r\n\r\n  String ret = \"\";\r\n  String url = String(host) + \"\/\" + id;\r\n\r\n  HTTPClient http;\r\n\r\n  http.begin(url,root_ca);\r\n  int status_code = http.GET();\r\n  \/\/Serial.print(\"status_code = \");\r\n  \/\/Serial.println(status_code);\r\n  if( status_code == 200 ){\r\n    Stream* resp = http.getStreamPtr();\r\n\r\n    DynamicJsonDocument json_response(255);\r\n    deserializeJson(json_response, *resp);\r\n\r\n    ret = (const char*)json_response[\"status\"];\r\n\r\n    if(json_response.containsKey(\"location\")){\r\n      location = (const char*)json_response[\"location\"];            \r\n    }else{\r\n      location = \"\";\r\n    }\r\n\r\n    \/\/serializeJson(json_response, Serial);\r\n    \/\/Serial.println(\"\");\r\n  }\r\n  http.end();\r\n\r\n  return ret;  \r\n}\r\n\r\n\/\/TTS\u306eid\u3092\u751f\u6210\u3002\u7a7a\u6587\u5b57\u5217\u306a\u3089\u30b5\u30fc\u30d0\u30fc\u30a8\u30e9\u30fc\u304b\u751f\u6210\u30a8\u30e9\u30fc(\u9069\u5b9c\u30ea\u30c8\u30e9\u30a4)\r\nString requestCreateTTS(String text){\r\n\r\n  String ret = \"\";\r\n\r\n  \/\/post\u3067\u6e21\u3059json\u751f\u6210\r\n  json_request.clear();\r\n  json_request[\"engine\"] = \"Google\";\r\n  JsonObject obj = json_request.createNestedObject(\"data\");\r\n  obj[\"text\"] = text;\r\n  obj[\"voice\"] = \"ja-JP\";\r\n  \/\/obj[\"voice\"] = \"en-US\";\r\n\r\n  \/\/serializeJson(json_request, Serial);\r\n  \/\/Serial.println(\"\");\r\n  serializeJson(json_request, buffer, sizeof(buffer));\r\n\r\n  \r\n  HTTPClient http;\r\n  http.begin(host,root_ca);\r\n  http.addHeader(\"Content-Type\", \"application\/json\");\r\n  int status_code = http.POST((uint8_t*)buffer, strlen(buffer));\r\n  \/\/Serial.print(\"status_code = \");\r\n  \/\/Serial.println(status_code);\r\n  if( status_code == 200 ){\r\n    Stream* resp = http.getStreamPtr();\r\n\r\n    DynamicJsonDocument json_response(255);\r\n    deserializeJson(json_response, *resp);\r\n\r\n    if(json_response.containsKey(\"id\")){\r\n      ret = (const char*)json_response[\"id\"];            \r\n    }\r\n\r\n    \/\/serializeJson(json_response, Serial);\r\n    \/\/Serial.println(\"\");\r\n  }\r\n  \r\n  http.end();\r\n\r\n  return ret;\r\n  \r\n}\r\n\r\nint createMp3FromSoundText(){\r\n  isPlaying = true;\r\n  \r\n  String id = \"\";\r\n  int counter = 0;\r\n  while(id.length()&lt;=0) {\r\n    id = requestCreateTTS(tts_text);\r\n    yield();\r\n    if(counter &gt;= 5 ){\r\n      Serial.println(\"[requestCreateTTS] request over 5 retry\");\r\n      return 0;   \r\n    }else{\r\n      counter++;\r\n    }\r\n  }\r\n  \r\n  Serial.print(\"[createMp3FromSoundText] success create mp3url id : \");\r\n  Serial.println(id);\r\n\r\n  if(!isPlaying) return 0;\r\n  \r\n  String ret;\r\n  do{\r\n    ret = isPreparedTTSMp3(id,location);\r\n    Serial.print(\"ret = \");\r\n    Serial.println(ret);\r\n  } while ( ret.compareTo(\"Pending\") == 0 );\r\n  \/\/Done\u4ee5\u5916\u306a\u3089\u30a8\u30e9\u30fc\r\n  if( ret.compareTo(\"Done\") != 0 ){\r\n    Serial.print(\"[isPreparedTTSMp3] error : ret = \");\r\n    Serial.println(ret);\r\n    return 0;\r\n  }\r\n  \r\n  \/\/https -&gt; http\u3078(Esp8266Audio\u306fhttp\u3057\u304b\u30c0\u30e1\u306a\u305f\u3081)\r\n  location.replace(\"https\", \"http\");\r\n  Serial.print(\"[createMp3FromSoundText] success create mp3url : \");\r\n  Serial.println(location);\r\n  \r\n  if(isPlaying){\r\n    \/\/effect_mp3\u306e\u6307\u5b9a\u304c\u306a\u3051\u308c\u3070\u52b9\u679c\u97f3\u306a\u3057\u3067TTS\u518d\u751f\r\n    Serial.println(\"[TTS] start TTS play\");\r\n    if(effect_mp3.compareTo(\"\") == 0){\r\n      tts_flag = true;\r\n      file = new AudioFileSourceICYStream(location.c_str());\r\n      file-&gt;RegisterMetadataCB(MDCallback, (void*)\"ICY\");\r\n      buff = new AudioFileSourceBuffer(file, 2048);\r\n      buff-&gt;RegisterStatusCB(StatusCallback, (void*)\"buffer\");\r\n      mp3 = new AudioGeneratorMP3();\r\n      mp3-&gt;RegisterStatusCB(StatusCallback, (void*)\"mp3\");\r\n      mp3-&gt;begin(buff, out);\r\n      delay(100);\r\n    }else{\r\n      \/\/effect_mp3\u306e\u52b9\u679c\u97f3\u518d\u751f\u5f8c\u3001TTS\u518d\u751f\r\n      tts_flag = false;\r\n      playEffect();\r\n    }\r\n    return 2;\r\n  }else{\r\n    Serial.println(\"[TTS] cancel before TTS play\");\r\n    return 0;       \r\n  }\r\n  \r\n}\r\n\r\nvoid subProcess(void * pvParameters) {\r\n    while (1) {\r\n\r\n      if(tts_state == 0){\r\n        \/\/ 0 \u5f85\u6a5f\u72b6\u614b\r\n\r\n      }else if(tts_state == 1){\r\n        \/\/ 1 SoundText\u304b\u3089URL\u3092\u751f\u6210\r\n        tts_state = createMp3FromSoundText();\r\n      \r\n      }else if(tts_state == 2){\r\n        \/\/ 2 \u52b9\u679c\u97f3\u3068TTS\u518d\u751f\r\n       if ( mp3 != NULL ){\r\n          if (mp3-&gt;isRunning()) {\r\n            if(!isPlaying){\r\n              mp3-&gt;stop();\r\n              Serial.println(\"[TTS] cancel TTS\");\r\n            }else if(!mp3-&gt;loop()){\r\n              mp3-&gt;stop();\r\n            }\r\n          } else {\r\n            \r\n            delete mp3;\r\n            mp3 = NULL;\r\n    \r\n            if(!tts_flag){\r\n              \/\/\u52b9\u679c\u97f3\u306e\u518d\u751f\u5b8c\u4e86\r\n              \/\/Serial.println(\"tts_flag false\");\r\n              file_effect-&gt;close();\r\n              delete file_effect;\r\n              delete id3_effect;\r\n              file_effect = NULL;\r\n              id3_effect = NULL;\r\n  \r\n              \/\/\u518d\u751f\u304c\u30ad\u30e3\u30f3\u30bb\u30eb\u3055\u308c\u3066\u306a\u3051\u308c\u3070\u6b21\u306bTTS\u3092\u518d\u751f\r\n              if(!isPlaying){\r\n                tts_flag = false;\r\n                tts_state = 0;\r\n                Serial.println(\"[TTS] finish TTS play (only effect)\");\r\n              }else{\r\n                file = new AudioFileSourceICYStream(location.c_str());\r\n                file-&gt;RegisterMetadataCB(MDCallback, (void*)\"ICY\");\r\n                buff = new AudioFileSourceBuffer(file, 2048);\r\n                buff-&gt;RegisterStatusCB(StatusCallback, (void*)\"buffer\");\r\n  \r\n                mp3 = new AudioGeneratorMP3();\r\n                mp3-&gt;RegisterStatusCB(StatusCallback, (void*)\"mp3\");\r\n                mp3-&gt;begin(buff, out);\r\n    \r\n                tts_flag = true;\r\n                delay(100);\r\n              }\r\n            \r\n            }else{\r\n              \/\/TTS\u304c\u518d\u751f\u5b8c\u4e86\r\n              buff-&gt;close();\r\n              file-&gt;close();\r\n              delete buff;\r\n              delete file;\r\n              buff = NULL;\r\n              file = NULL;\r\n              \/\/\u521d\u671f\u5f85\u6a5f\u72b6\u614b\u306b\u623b\u3059\r\n              tts_flag = false;\r\n              isPlaying = false;\r\n              tts_state = 0;\r\n              Serial.println(\"[TTS] finish TTS\");\r\n            }          \r\n          }\r\n        }\r\n      }\r\n      delay(1);\r\n    }\r\n}\r\n\r\nvoid setup()\r\n{\r\n  Serial.begin(115200);\r\n  delay(1000);\r\n  Serial.println(\"Connecting to WiFi\");\r\n\r\n  WiFi.disconnect();\r\n  WiFi.softAPdisconnect(true);\r\n  WiFi.mode(WIFI_STA);\r\n  \r\n  WiFi.begin(ssid, password);\r\n\r\n  while (WiFi.status() != WL_CONNECTED) {\r\n    Serial.println(\"...Connecting to WiFi\");\r\n    delay(1000);\r\n  }\r\n  Serial.println(\"Connected\");\r\n  \r\n  \/\/SPIFFS\u521d\u671f\u5316\r\n  SPIFFS.begin();\r\n  \/\/tts\u521d\u671f\u5316\r\n  initTTS();\r\n  \/\/\u767a\u8a71(\u52b9\u679c\u97f3EFFECT_TWO_BELL\u5f8c\u306bTTS)\r\n  speak_text(msg,EFFECT_TWO_BELL);\r\n}\r\n\r\nvoid loop(){\r\n\r\n}<\/pre>\n<p>\u4e00\u5fdc\u3001\u30b3\u30fc\u30c9\u306e\u30d9\u30fc\u30b9\u306fESP8266Audio\u306e\u30b5\u30f3\u30d7\u30eb\u30bd\u30fc\u30b9\u306eStreamMP3FromHTTP.ino\u306b\u4ed8\u3051\u52a0\u3048\u308b\u611f\u3058\u3067\u66f8\u304d\u3066\u3044\u307e\u3059\u3002\u5404\u7a2e\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u306f\u90aa\u9b54\u306a\u3089\u6d88\u3057\u3066\u3082OK\u3067\u3059\u3002\u30ed\u30b0\u304c\u6c5a\u308c\u308b\u306e\u3067\u30b3\u30e1\u30f3\u30c8\u30a2\u30a6\u30c8\u3057\u3066\u3044\u307e\u3059<\/p>\n<div class=\"linkcard\"><div class=\"lkc-external-wrap\"><a class=\"lkc-link no_icon\" href=\"https:\/\/github.com\/earlephilhower\/ESP8266Audio\/blob\/master\/examples\/StreamMP3FromHTTP\/StreamMP3FromHTTP.ino\" data-lkc-id=\"834\" target=\"_blank\" rel=\"external noopener\"><div class=\"lkc-card\"><div class=\"lkc-info\"><div class=\"lkc-favicon\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.google.com\/s2\/favicons?domain=github.com\" alt=\"\" width=\"16\" height=\"16\" \/><\/div><div class=\"lkc-domain\">GitHub<\/div><div class=\"lkc-share\"> <div class=\"lkc-sns-po\">107 Pockets<\/div><\/div><\/div><div class=\"lkc-content\"><figure class=\"lkc-thumbnail\"><img decoding=\"async\" class=\"lkc-thumbnail-img\" src=\"\/\/androiphone.uvs.jp\/wp-content\/uploads\/pz-linkcard\/cache\/344be2eb68d2a0981f206cc4b20aee717472f1065120e50a2ceb999ce8772b53.jpeg\" width=\"100px\" height=\"108px\" alt=\"\" \/><\/figure><div class=\"lkc-title\">ESP8266Audio\/StreamMP3FromHTTP.ino at master \u00b7 earlephilhower\/ESP8266Audio<\/div><div class=\"lkc-url\" title=\"https:\/\/github.com\/earlephilhower\/ESP8266Audio\/blob\/master\/examples\/StreamMP3FromHTTP\/StreamMP3FromHTTP.ino\">https:\/\/github.com\/earlephilhower\/ESP8266Audio\/blob\/master\/examples\/StreamMP3FromHTTP\/StreamMP3FromHTTP.ino<\/div><div class=\"lkc-excerpt\">Arduino library to play MOD, WAV, FLAC, MIDI, RTTTL, MP3, and AAC files on I2S DACs or with a software emulated delta-sigma DAC on the ESP8266 and ESP32 - ESP8266Audio\/StreamMP3FromHTTP.ino at mast...<\/div><\/div><div class=\"clear\"><\/div><\/div><\/a><\/div><\/div>\n<p>\u30b5\u30f3\u30d7\u30eb\u3068\u9055\u3046\u3068\u3053\u308d\u306f\u3001loop()\u3067\u306f\u306a\u304f\u5225\u30bf\u30b9\u30af\u3092\u7528\u610f\u3057\u3066\u305d\u308c\u3092TTS\u5c02\u7528\u3068\u3057\u3066\u52d5\u304b\u3057\u3066\u3044\u307e\u3059\u3002\u30e1\u30a4\u30f3\u3067\u306f\u5730\u9707\u76e3\u8996\u51e6\u7406\u3068\u753b\u50cf\u5408\u6210\u3092\u884c\u3046\u4e88\u5b9a\u306e\u70ba\u3001\u5225\u30bf\u30b9\u30af\u306b\u3057\u307e\u3057\u305f\u3002\u30de\u30eb\u30c1\u30bf\u30b9\u30af\u306b\u3064\u3044\u3066\u306f\u4ee5\u4e0b\u306e\u8a18\u4e8b\u3092\u53c2\u8003\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div class=\"linkcard\"><div class=\"lkc-external-wrap\"><a class=\"lkc-link no_icon\" href=\"https:\/\/qiita.com\/nnn112358\/items\/733b5f52957980bb9fb1\" data-lkc-id=\"835\" target=\"_blank\" rel=\"external noopener\"><div class=\"lkc-card\"><div class=\"lkc-info\"><div class=\"lkc-favicon\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.google.com\/s2\/favicons?domain=qiita.com\" alt=\"\" width=\"16\" height=\"16\" \/><\/div><div class=\"lkc-domain\">Qiita<\/div><div class=\"lkc-share\"> <div class=\"lkc-sns-hb\">1 User<\/div> <div class=\"lkc-sns-po\">5 Pockets<\/div><\/div><\/div><div class=\"lkc-content\"><figure class=\"lkc-thumbnail\"><img decoding=\"async\" class=\"lkc-thumbnail-img\" src=\"https:\/\/s.wordpress.com\/mshots\/v1\/https%3A%2F%2Fqiita.com%2Fnnn112358%2Fitems%2F733b5f52957980bb9fb1?w=100\" width=\"100px\" height=\"108px\" alt=\"\" \/><\/figure><div class=\"lkc-title\">M5Stack\u3067\u30de\u30eb\u30c1\u30bf\u30b9\u30af\u51e6\u7406\u3092\u5b9f\u884c\u3059\u308b - Qiita<\/div><div class=\"lkc-url\" title=\"https:\/\/qiita.com\/nnn112358\/items\/733b5f52957980bb9fb1\">https:\/\/qiita.com\/nnn112358\/items\/733b5f52957980bb9fb1<\/div><div class=\"lkc-excerpt\">\u76ee\u7684M5stack\u306fCPU:ESP32\u3092\u5185\u81d3\u3057\u3066\u304a\u308a\u3001\u30de\u30eb\u30c1\u30bf\u30b9\u30af\u51e6\u7406\u306b\u5bfe\u5fdc\u3057\u3066\u3044\u308b\u3002M5stack\u3067\u30de\u30eb\u30c1\u30bf\u30b9\u30af\u51e6\u7406\u3092\u884c\u3046\u3002\u65b9\u6cd5xTaskCreatePinnedToCore()\u95a2\u6570\u3092\u4f7f\u3046\u3053\u3068\u3067\u5b9f\u88c5\u3067\u304d\u308b\u3002x...<\/div><\/div><div class=\"clear\"><\/div><\/div><\/a><\/div><\/div>\n<p>tts\u306e\u307f\u3055\u305b\u308b\u5834\u5408\u306floop()\u306b\u76f4\u66f8\u304d\u3067\u3082ok\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<p>ESP8266Audio\u3067\u7528\u3044\u308b\u5909\u6570\u3067\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u304c\u767a\u751f\u3057\u3066\u3057\u307e\u3046\u3088\u3046\u306a\u306e\u3067\u518d\u751f\u5b8c\u4e86\u5f8c\u306fdelete\u3055\u305b\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059(Close\u3055\u305b\u3066delete\u3057\u3066\u3044\u308b\u90e8\u5206)<\/p>\n<p>\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u6642\u306e\u30d0\u30c3\u30d5\u30a1\u30b5\u30a4\u30ba\u306f\u5927\u304d\u3051\u308c\u3070\u3088\u308a\u5b89\u5b9a\u3057\u307e\u3059\u306e\u3067\u3001PSRAM\u304c\u3042\u308bESP32-wrover\u30b7\u30ea\u30fc\u30ba\u3067\u306f\u7a4d\u6975\u7684\u306bPSRAM\u306b\u78ba\u4fdd\u3057\u305f\u307b\u3046\u304c\u3088\u3055\u305d\u3046\u3067\u3059\u3002PSRAM\u306a\u3089\u9060\u616e\u306a\u3057\u306b\u78ba\u4fdd\u3067\u304d\u307e\u3059\u306d<\/p>\n<div class=\"linkcard\"><div class=\"lkc-external-wrap\"><a class=\"lkc-link no_icon\" href=\"https:\/\/github.com\/earlephilhower\/ESP8266Audio\/issues\/121\" data-lkc-id=\"836\" target=\"_blank\" rel=\"external noopener\"><div class=\"lkc-card\"><div class=\"lkc-info\"><div class=\"lkc-favicon\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.google.com\/s2\/favicons?domain=github.com\" alt=\"\" width=\"16\" height=\"16\" \/><\/div><div class=\"lkc-domain\">GitHub<\/div><\/div><div class=\"lkc-content\"><figure class=\"lkc-thumbnail\"><img decoding=\"async\" class=\"lkc-thumbnail-img\" src=\"\/\/androiphone.uvs.jp\/wp-content\/uploads\/pz-linkcard\/cache\/06e31420d1c7ba8604cc33c9d97c1726cf88f939824b3f3c6dbdea0ac4c7548d.jpeg\" width=\"100px\" height=\"108px\" alt=\"\" \/><\/figure><div class=\"lkc-title\">Using esp32 with SpiRAM \u00b7 Issue #121 \u00b7 earlephilhower\/ESP8266Audio<\/div><div class=\"lkc-url\" title=\"https:\/\/github.com\/earlephilhower\/ESP8266Audio\/issues\/121\">https:\/\/github.com\/earlephilhower\/ESP8266Audio\/issues\/121<\/div><div class=\"lkc-excerpt\">Hello, I finally managed to make my esp32 work. I&#039;d like to use it with the SpiRAM as well, is it possible ? Has some\u00f4ne done it ?<\/div><\/div><div class=\"clear\"><\/div><\/div><\/a><\/div><\/div>\n<pre class=\"lang:default decode:true\">\/\/PSRAM\u306b\u78ba\u4fdd\u3059\u308bTTS\u7528\u30d0\u30c3\u30d5\u30a1\r\nuint32_t spiBufferSize = 1024 * 300; \/\/300kB\u7a0b\u5ea6\u78ba\u4fdd(TTS\u306e\u9577\u3055\u3092\u3067\u5224\u65ad)\r\nbyte* spiBuffer;\r\n\r\nvoid initTTS(){\r\n\r\n  \uff5e\u7565\uff5e\r\n\r\n  \/\/PSRAM\u4e0a\u306b\u30d0\u30c3\u30d5\u30a1\u78ba\u4fdd\r\n  spiBuffer = (byte*)ps_malloc(spiBufferSize);\r\n  if (spiBuffer == NULL) {\r\n    Serial.println(\"spiBuffer : ps_malloc error\");\r\n    ESP.restart();\r\n    delay(3000);\r\n    return;  \r\n  }\r\n}\r\n  \/\/\u3053\u306e\u90e8\u4f4d\u3092\u66f8\u304d\u63db\u3048\u308b\r\n  buff = new AudioFileSourceBuffer(file, spiBuffer, spiBufferSize);\r\n  \/\/buff = new AudioFileSourceBuffer(file, 2048);<\/pre>\n<p>\u30b9\u30d4\u30fc\u30ab\u30fc\u3084I2SDAC\u306e\u63a5\u7d9a\u306f\u524d\u306e\u8a18\u4e8b\u306e\u63a5\u7d9a\u7de8\u3092\u8aad\u3093\u3067\u304f\u3060\u3055\u3044\u3002\u3046\u307e\u304f\u3044\u3051\u3070\u4e0b\u306e\u3088\u3046\u306b\u518d\u751f\u3067\u304d\u308b\u3068\u601d\u3044\u307e\u3059\u3002TFT\u3084\u3089SD\u30ab\u30fc\u30c9\u3064\u3044\u3066\u307e\u3059\u304cTTS\u3060\u3051\u306a\u3089\u4e0d\u8981\u3067\u3059<\/p>\n<div class=\"linkcard\"><div class=\"lkc-internal-wrap\"><a class=\"lkc-link no_icon\" href=\"https:\/\/androiphone.uvs.jp\/?p=3809\" data-lkc-id=\"825\"><div class=\"lkc-card\"><div class=\"lkc-info\"><div class=\"lkc-favicon\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.google.com\/s2\/favicons?domain=androiphone.uvs.jp\" alt=\"\" width=\"16\" height=\"16\" \/><\/div><div class=\"lkc-domain\">ANDROIPHONE<\/div><div class=\"lkc-share\"> <div class=\"lkc-sns-hb\">2 Users<\/div><\/div><\/div><div class=\"lkc-content\"><figure class=\"lkc-thumbnail\"><img decoding=\"async\" class=\"lkc-thumbnail-img\" src=\"\/\/androiphone.uvs.jp\/wp-content\/uploads\/2021\/11\/51COgki6a5L._SL1000_-e1636102086490-150x150.jpg\" width=\"100px\" height=\"108px\" alt=\"\" \/><\/figure><div class=\"lkc-title\">[ESP32] ESP32\u306b\u767a\u8a71(TextToSpeech[TTS])\u3055\u305b\u308b\u3000\u63a5\u7d9a\u7de8<\/div><div class=\"lkc-date\">&#x1f552;&#xfe0f;2021\u5e7411\u67089\u65e5<\/div><div class=\"lkc-excerpt\">ESP32\u5358\u4f53\u3067\u97f3\u3092\u51fa\u529b\u3059\u308b(ESP8266Audio)\u524d\u306bDFPlayer\u3092\u4f7f\u3063\u3066\u97f3\u306e\u518d\u751f\u3092\u3057\u307e\u3057\u305f\u3002\u3057\u304b\u3057\u3001\u3053\u306e\u65b9\u6cd5\u306f\u3067\u306f\u3001\u3042\u3089\u304b\u3058\u3081\u6c7a\u3081\u3089\u308c\u305f\u56fa\u5b9a\u306emp3\u30fbwav\u30d5\u30a1\u30a4\u30eb\u306e\u518d\u751f\u3057\u304b\u3067\u304d\u306a\u3044\u3067\u3059\u3002 \t\u30cd\u30c3\u30c8\u304b\u3089\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066mp3\u3092\u518d\u751f\u3059\u308b \t\u30cd\u30c3\u30c8\u304b\u3089\u76f4\u63a5\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u518d\u751f\u3059\u308b\u3053\u308c\u3092\u3059\u308b\u306b\u306fESP8266Audio\u3068\u3044\u3046\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u7528\u3044\u3066ESP32\u306b\u518d\u751f\u3055\u305b\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002ESP8266Audio\u3067\u306fI2S\u3092\u7528\u3044\u3066\u5916\u90e8\u306e\u30a2\u30f3\u30d7\u30e2\u30b8\u30e5\u30fc\u30eb\u3067\u518d\u751f\u3059\u308b\u3053\u3068\u3092\u52e7\u3081\u3066\u3044\u307e\u3059https:\/\/www.amazon.co.jp\/Youmile-%E3%82%AA%E3%83%BC%E3%83%87%E3%82%A3%E3%82%AA%E3%83%91%E3%...<\/div><\/div><div class=\"clear\"><\/div><\/div><\/a><\/div><\/div>\n<p><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/X841tTeclj0\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u97d3\u56fd\u306eSTREET WOMAN FIGHTER\u3092\u89b3\u3066\u30d3\u30e8\u30f3\u30bb\u306eRun The World(Girl)\u304c\u982d\u304b\u3089\u96e2\u308c\u306a\u304f\u306a\u3063\u3066\u56f0\u3063\u3066\u3044\u307e\u3059w \u3053\u306e\u7d9a\u304d\u306b\u306a\u308a\u307e\u3059 \u3055\u3066\u3001\u3069\u3046\u3084\u3063\u3066TTS\u3055\u305b\u308b\uff1f \u307e\u3041\u305d\u3093\u306a\u3053\u3068\u306f\u3044\u3044\u3068\u3057\u3066\u3001\u6700 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3837,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_locale":"ja","_original_post":"https:\/\/androiphone.uvs.jp\/?p=3830","footnotes":""},"categories":[163,166,162,167,164],"tags":[],"class_list":["post-3830","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-esp32","category-esp8266audio","category-max98357-","category-sounoftext","category-164","ja"],"_links":{"self":[{"href":"https:\/\/androiphone.uvs.jp\/index.php?rest_route=\/wp\/v2\/posts\/3830","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/androiphone.uvs.jp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/androiphone.uvs.jp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/androiphone.uvs.jp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/androiphone.uvs.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3830"}],"version-history":[{"count":13,"href":"https:\/\/androiphone.uvs.jp\/index.php?rest_route=\/wp\/v2\/posts\/3830\/revisions"}],"predecessor-version":[{"id":3847,"href":"https:\/\/androiphone.uvs.jp\/index.php?rest_route=\/wp\/v2\/posts\/3830\/revisions\/3847"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/androiphone.uvs.jp\/index.php?rest_route=\/wp\/v2\/media\/3837"}],"wp:attachment":[{"href":"https:\/\/androiphone.uvs.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3830"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/androiphone.uvs.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3830"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/androiphone.uvs.jp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3830"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}