{"id":1216,"date":"2019-06-13T15:49:14","date_gmt":"2019-06-13T06:49:14","guid":{"rendered":"https:\/\/eguchi.jp\/blog\/?p=1216"},"modified":"2019-06-13T16:04:34","modified_gmt":"2019-06-13T07:04:34","slug":"m5stick-c%e3%81%a8%e3%82%b7%e3%83%aa%e3%82%a2%e3%83%ab%e3%82%ab%e3%83%a1%e3%83%a9%e3%82%92%e7%b9%8b%e3%81%84%e3%81%a7%e3%81%bf%e3%81%9f","status":"publish","type":"post","link":"https:\/\/eguchi.jp\/blog\/?p=1216","title":{"rendered":"M5STICK-C\u3068\u30b7\u30ea\u30a2\u30eb\u30ab\u30e1\u30e9\u3092\u7e4b\u3044\u3067\u307f\u305f"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">UART\u63a5\u7d9a\u3092\u3055\u3089\u306b\u8ffd\u6c42\u3059\u308b\u305f\u3081\u306b\u3001\u307e\u305f\u3001\u624b\u5143\u306b\u3042\u3063\u305f<a href=\"https:\/\/www.seeedstudio.com\/Grove-Serial-Camera-Kit.html\">Grove &#8211; Serial Camera Kit<\/a>\u3092\u3001M5STICK-C\u306eGROVE\u7aef\u5b50\u306b\u63a5\u7d9a\u3057\u3066\u3001\u5199\u771f\u3092\u53d6\u5f97\u3057\u3066\u307f\u3088\u3046\u3068\u601d\u3063\u305f\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/eguchi.jp\/blog\/wp-content\/uploads\/2019\/06\/IMG_2312-1024x768.jpg\" alt=\"\" class=\"wp-image-1217\" srcset=\"https:\/\/eguchi.jp\/blog\/wp-content\/uploads\/2019\/06\/IMG_2312-1024x768.jpg 1024w, https:\/\/eguchi.jp\/blog\/wp-content\/uploads\/2019\/06\/IMG_2312-300x225.jpg 300w, https:\/\/eguchi.jp\/blog\/wp-content\/uploads\/2019\/06\/IMG_2312-768x576.jpg 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>\u63a5\u7d9a\u30a4\u30e1\u30fc\u30b8\u56f3<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e00\u822c\u306e\u65b9\u306f\u3001\u64ae\u5f71\u3057\u305f\u5199\u771f\u3092M5STICK-C\u306e\u6db2\u6676\u306b\u8868\u793a\u3059\u308b\u3060\u308d\u3046\u3051\u3069\u3001<a href=\"https:\/\/github.com\/m5stack\/M5StickC\/tree\/0.0.5\">M5STICK-C\u306e\u30e9\u30a4\u30d6\u30e9\u30ea ver0.05<\/a>\u306f\u3001M5STACK\u306e\u3088\u3046\u306b\u3001JPG\u30c7\u30fc\u30bf\u3092\u8868\u793a\u3059\u308bAPI\u304c\u307e\u3060\u5b9f\u88c5\u3055\u308c\u3066\u3044\u306a\u3044\uff08\u30b3\u30e1\u30f3\u30c8\u30a2\u30a6\u30c8\u3055\u308c\u3066\u3044\u308b\uff09\u3002<br>M5STACK\u307f\u305f\u3044\u306b\u3001TF\u30ab\u30fc\u30c9\u30b9\u30ed\u30c3\u30c8\u304c\u642d\u8f09\u3055\u308c\u3066\u3044\u306a\u3044\u306e\u3067\u3001\u30e1\u30c7\u30a3\u30a2\u306b\u3082\u66f8\u304d\u51fa\u3057\u3067\u304d\u306a\u3044\u3002<br>\u3058\u3083\u3042\u3001\u6c4e\u7528I\/O\u3092\u4f7f\u3063\u3066SPI\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u4f7f\u3063\u3066TF\u30ab\u30fc\u30c9\u30b9\u30ed\u30c3\u30c8\u3092\u642d\u8f09\u3059\u308b\u3068\u3044\u3046\u624b\u6bb5\u3082\u8003\u3048\u3089\u308c\u308b\u3051\u3069\u3001\uff13\u3064\u3057\u304bGPIO\u304c\u306a\u3044\u306e\u3067\u3001\u5b9f\u88c5\u3067\u304d\u306a\u3044\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u3053\u3067\u3001\u8ae6\u3081\u308b\u8a33\u306b\u3044\u304b\u306a\u3044\u79c1\u306f\u3001\u6587\u5b57\u5217\u3067\u753b\u50cf\u3092\u8868\u793a\u3059\u308b\u624b\u6bb5\u306b\u6253\u3063\u3066\u51fa\u308b\u3053\u3068\u306b\u3057\u305f\u3002<br>Chrome\u30d6\u30e9\u30a6\u30b6\u3092\u4f7f\u3063\u3066\u3044\u308b\u4eba\u306f\u3001\u4e0b\u8a18\u306e\u6587\u5b57\u5217\uff08\u9577\u3044\u3051\u3069\uff09\u3092URL\u306b\u30b3\u30d4\u30da\u3057\u3066\u307f\u307e\u3057\u3087\u3046\uff01<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">data:image\/jpeg;base64,\/9j\/2wCEABQODxIPDRQSEBIXFRQYHjIhHhwcHj0sLiQySUBMS0dARkVQWnNiUFVtVkVGZIhlbXd7gYKBTmCNl4x9lnN+gXwBFRcXHhoeOyEhO3xTRlN8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fP\/AABEIAPABQAMBIQACEQEDEQH\/3QAEABT\/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29\/j5+gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8\/T19vf4+fr\/2gAMAwEAAhEDEQA\/AOb+zn+8Pypfs5\/vfpWNwHC3\/wBqopUEbAZzxmncC3GNsaj2p4qSRajb75+lMB1MPL0ANxjIpRFIY2kWOQxqcM4QlVPoT0HagaK6czE+gJpknUD0FMYylAycUwNu2XBUDsKsP0rB7iZGOlIKALCEMuQc0q8fKfwrIoejbDg9DUxFSxjSKbikBWu7cyDfHw4\/WpriU2+gJFyGc8j3q072QMwiaaa6CRtFMAooAKWgB1KKANXSo8I8h7nArQrCW4z\/0MKlrAQuarSfPcEdsgf4\/wBaaAsljg05TkA0ALmo+rGgQ40wdTQAHrVz+2LiPShp6KixZJZhncwJJx+tBRmxlSkhC4b1zUL8uaaASpIF3TKPehgbduOSalfpWHUREelNY7VJPYZpoGU7C7KSbXPysfyrXI3ClUVmUKPmGD1qSJjna34VkwJMUhWpGNxzVbUka4jCrzs6D1pp2YGKcDg5BHrScHvXUSJj3FBFMBMGg8UAFLTAUUopAb9tH5UCJ3A5qfNc73Gf\/9HAzTgea5wH8d+lVLf55dx68saoRbpaQgpq8nPvQA7FMFMBpPJqORuDQUJEP3WfVqg60wFqzYpunz6Ck9gNmBcJTnrERE3aq94223b34qogZda+mXW9fKcjcOlVNXQy+Vz9RQPm4PDCuYZNG+7g8EU8rSGRv8oJqMD5cmkBRvrLzAZIvvjqP71ZVdFN3VhBSZrUQZpCc0AKKWgBasWaebcxr2zk1L2A3c0ua5xn\/9Ln6UVzgErYhb6Y\/OmWwwCfwpgT5pc0CFzimp2oAfioxwKAITnJ5pkh+WmMd92BfoTUIpgKBWhp0fDtj2qZPQDVRMKBSSVkIgLKW6inII2cebGsi+hAIoew1uZ+p2ZtZQyoRHJyO4B9KpoxRgynBFaRfNEDoLO4FxEG\/iHUVOVyPeueSsxjckN0ww\/WrcbCRff0pMZFcDlVHc0pTjFSBEy1m3tlvJkiHzd19auDswMykrqJCigBaKAFrR0mPLPKe3AqJ7AamaM1zjP\/0+f2L\/f\/APHqNq9n\/wDHq57sCOZuFXr3NSJ8qgUwFzS5NACknFOjHf2oQmamkX9vp0kss8BmYphMdj6fjxz7VmSMCzMqKgPIVei+wp30sBXNRydBQhkk3CY9gKgFNAPWuv8AC+nW9xatJN85z9zJGPepau0mMLy3+z3UkSnKoQAT1PGf61TYAnk1k1YTIcDcTRtHfpQ9hLclaNr20dGb5UGR9axJraaBlWRRlhkEHINFOVtCie18+2fzDHhRwwyP5V1h05f7PiuPN2syhiGHHPQU2lK7Apz2xjUElXB6bck\/lUSCVHBCMc+1YXGSkFrobwVwvAIqVlpAROtQOtAzLv7XJMsY5\/iHrWdXTB3RLCkrQQtGaAFrdsY\/KtUB6nk1lUeg0WKM1iM\/\/9TE\/df3Sf8AgJo\/df3P\/HTWNiNSuqiW5JAwgPpVnyxSKvYPLHqaXyh6miwrh5Q9TSoMZoBu4P8AdNRMetMERmomGZFHvQih9wf\/AEKoRTAcK37CV4kjCOyHHVWIP6VEgLZcnJPJPJJqA9T9KgRETtQt6c1Bay+YpBOWB5oa0BGjEvl2TkjhjiotTsriS8je1VCir\/GQFU\/jWSdpXZZXkiWMfv8AUrXI\/gQbv04qeLUDKEikuXkjXhf3ZAH61d29kIskKP4j+VO3YXIY\/wAqzsBUS8kikE0+Sh43elau5XUMpBBoaGRORULAVIFdsZrLvbTBMkQ46lRWkHZgUaK6SRaKAJIIzLKqDqTXQAYAHpWNRjQtJWQz\/9XIKzD+A\/8AfQ\/wqKWSSNCxGOw571iQrEcKMsWQhO6rADEcnnvxQNhsP979KXY3979KQrgUbHUU1FbsaY7gwPrULUDQ00ipumT60hjJjnb+J\/Oo6oByDLgeprftxg\/QVEgLB+7UbfdY1DJIbgfuHwcYFZMExilDdieatLQaNPUbxUtIY42VmJ3Hvis2e+uLlNkshKenQVMILdjGLhEDY5PT2pU82ZwqkljV+YG1aM3+qk3EoPvFSAaszHbE3qeK53uMPLBhCn0qvE+JTCG246DsPapGWjDLj72ajZJB1qbgQsH71E26qQGddW+wl0Hy9x6VWrpi7oQUtUI0NJj3TPIf4Rx9TWrXPPcoSmucAmoEf\/\/Wx2uLlgCseR7rirlyLO\/ltLOCNYfLA865ZNrFsfNkZxj8cg\/rmrEJW2K5RgWWKRWjUkKShGR2OKERlb52Bz6Uibj\/AC\/elCe9ILkcuVGB6VGofAPFBSGtu3c4pjCgaGYp8QwWPoppFMrTffA9ABTKoCa0XdcJ7c1vWy8E1EtxMlYVGw6CoYitftstX9+KxjWkRoSlqhj2+6pHbip7F5BOEiOC3WpewG8PMHZT+lQyO8kqxgLkHJGelc9hlofd5qnKmJPNA6daQF61mz8rHPofX\/69TsAaljIXjHpVd4hSGQPCKybu18hsj7h\/Q1rTlZiZWoroJNzToTFbDPV\/mNWq5ZO7KENQynjFJAf\/18+SAQIXErOw6EkhR7+9VFIRcL+JD4zXNB82pLVhUIMnLFVI\/wCemeal2x8Hzs45wXrQlkyEMoI5p+KRJBN1P0pO1BSI2+9UfegpCE05OI5GPsKkplWXG8k55pnFWBb09czE+grctxiMVD3JY5zg0zGX+gqQM7V3wsaepzWZWiGthKUUxjlYqeK1dLh2yM00YRgOCeKznsBqEqATuHHvWWlyIgZ258x8fhWdrgam4NGGU5BHBpijPWoGQkG3YDJCE8H+6avQy712k\/Nj86TGPNRMKkZCwqCWMOCGGQaaEY91bGBuOUPQ1HBGZZkQfxEV0qV43EdFwOB0HSiuYY01WkbLGqQH\/9DMuro3Ucci2yxjkdM5\/Wq4Z+vkj8v\/AK9Y2S2M1tqxS7lSPJH4CpVaPbzE2e\/y0wfkSQspYqqsB7jFTYoJZWm+8R74pxFIZC5wWqsr5lx60y0Skc04jEH1aoKK0oyM+lRVSA0NNX5Hb3xW2gwgHtUvcljX6j3NNUfMxqRGRqrZuQvotUa0RS2CimMUHBFXZbqaJlaNyA6gn6jj\/CpauA37dPKPLZgd3HSlv8KYo1\/hXJqbWaQE+m3mP3Mh4PQ1rIOKzmrMYOgdSrDINVQWt5ArH5CflY9j6GoAvxyiQc8MOooaoGRsKicUAQSIrqVYZBqCyszFcs5wVA+U9+atSsmgL9IakBjnCk1VY5NUgP\/R5s3UxjWMudi9BTobiYuFD9eOelZk8qLoF2P44\/ypV89G+bY26kRoPPn4B2oMehNTKcjNBJXfmX8acaRRRnk6getQIcOD71Rp0LjDilk4ijHrk1m9wIWGRVcjBxVIZracn7hPc5rX7VPUhkTff+gpE+79aXUDBvW33cp98VBWhYlFAC095GdUU4wvSkBLZJvuF9uabdP5lzIwORnA+gqftARAkEEda3tPuhcQ4Y\/OvX3pVFdAW6a6h1KsMg1zjK2WtmGT8o6Me3sfarqyB1yPyoYxpqN+lSBERTk4FMBx60hNAEMzcYqvnqatAf\/S5z7Hcf8APFqVLO4J\/wBUy+5rDniFgMN15mRHITnritE27bRmaTPXk01JMiSBELKP3z5+tSxIU+XLMOuTRci3kQlW3jg9+1MmcovAOfpRdFJamedxPQ\/lToFLTxqq5ZmCqPUngUXRpY6HXNHGmxwvG7yI4KuzY4btj68\/lWPIwbaB2GKl6bhYjPHWoJcBuvWhMZt2K4WMDsK0e1CM2V5HK7jtz260jOUiyVxgetJAc8fmJbIJJzSbfcVoWJt+lGMGgApaALtl+6hlmPYVR571C3YBUtvO0EodT0qrXA6GKVZoxInQ06uVqwxGAYYIzVcK9s26P5o+6+n0pDLSusiBlOQaa1SBEwzS0xik00nigRVlbJNMPQCtEB\/\/04hThXmlDhThQMcAKcKQhwApwA9KBjgPanAYOR1FAEskskwHmuXA6A9KZtHoKNwHbR6D8qDGh6qp+ooAUIo6KB+FLtU9hTu0FhPLT+4v5UGKNhhkU\/UUXYWI2srVhhreI\/8AABTf7Psz\/wAusP8A3wKLsBp02yP\/AC6xf98Cm\/2VZf8APslHNLuAh0mxP\/Luv5mk\/six\/wCeA\/76NPnl3Cw7+zbXyzGIsIeoDGojo1kf+WRH\/Az\/AI0c8l1AYdFsv7jj\/gZpp0SzPTzB\/wACp+0kImt7CK2BEbPg9ic1KYV9TScm9wGmIDpTDHSuFirMjwMZIc4\/iHY0+C5jnGM7W\/un+lO10A5+KbmkMCeKY5wppiKucnmkHJzVgf\/UiFO+leaUPFLQMeKcKQhwpwoGOFOFADqWmAtLSAKKACloAQmjdQAbqTdQAbqM0ALSUAIaYcCgBOtB6UAM570hoAaeaoXFuEbeq5XuB1H0pp2AFkYJkHzY\/UfeH+NKHVhlTkU7AOBzUMzdqaEQ9ATQOBzVAf\/ViFPFecUOFOpDHCnCgQ4U\/HGKBjgOKUUAOpRQAtLSAKWgAooAQjNIVoATBoxQAUlACg0tACU0jNACYxTTQA3NNNACGmnnrQBSngaN\/Ng6919aiOJcvCdsg+8P\/rVaAIpwW2sNrehpjNuYmnawgbio2bP0qkB\/\/9aMU4V5xQ8UtIB4pwoAcKcKBjhThQAtOFAC0tABS4oASikAtFACUYoATikKigAAxRQAlNNACE01ulAEZpM0ABppoENPSqlxBlvMiO1x39aadhlSRllBVxslHb\/CmBuApOWFapCADPWlIpgf\/9fKiu5pRndt+keal85gPmuHH\/bMCuJxSGItzH0+2Sk+w\/8ArVJ5q\/8APzcH6Kf8KVn2GKJvSa6P\/AP\/AK1L57Do14f+AClYBRPN2Nz+KLUgmuexk\/4EgpOwCNd3y\/dhDfUAf1py3uoY5tU\/76p2j3AlF1e97eL\/AL7NPFze\/wDPCH\/vs\/4VOgD1nvO8UP8A32f8KeJbn+5CPxNIYvm3PpF+tBe7PQwD8DQAm68\/vwf98ml3Xf8Afh\/74P8AjQAZuv78X\/fB\/wAaD9qP\/LeMfSP\/AOvQAhFwBzcZ+kf\/ANemFpx\/HIfoo\/xpAHmT9\/N\/JaXzpR1E3\/fC0ANM0n\/Tb\/v2KabiQf8APb8Y6AGG5m\/6a\/8AfukNxL3M3\/fumAnnyd2n\/wC+P\/rUhlc97j\/vmgBPNf8Au3B\/Ck8yTsk9Owhpkl\/55zH6kUebKP8Ali\/\/AH0KLIBDJN\/zxP4tTGluM4EI\/wC+qaSAqXrSogd1QHPHc0y1izEZH4J6fStVZR0ESBuaUmkM\/9CgIm7yP+HFPW3XOTyffmuHmGTrGB0P6U8Kf71SA7aT3NOCe5pDHBKdsFIBfLFOEY9KBjhGKcIx6UAKEFPCD0oAAg9KXYDQAuwUBAO1AC7B6Uu0elACMme1J5dAC7BSbaADFIVoEJikIoAQimNQA08UzFACMM0wrTAaw5phFAFG8iWZgG6L6etMYkjGMAdq0T0AaopSKYH\/0awGakUYrz2MeDTxSAeKXNAx2acKAFFOFADhTqQC5xSimA4UtAxaKAClpAJmigAooASkoASkNAhpphxTAawzTMUgENMNADTUchCqSegoAp53MM9W+alePvVgREYNJVAf\/9KqGp4fNcAx4OakFSMcDThSAUU\/vQA4UvU9aAHCnCmA4UtACilpDFFLQAUUAJkUE0AJupM+9ABu55NG5fUUAN3r\/eH50hdfUfnQIY0i\/wB4fnUfmoDyw\/OgBrTxg8sKYbiP1oAYbhPWmG5T3p2AY1yvpVaeYykIAQKaQBGrb8t6YqbtQBDIlRVSYH\/\/084S49KeJgfSuJoYokx3p4nOetTYB4mPrS+cf71KwDhMf71OEx\/vUhjhKf71PDv2NADgz+pp26T1NIBQZPU0794f4jRqAmJc\/eNPxL\/eNGoBtl\/vGjZIf4qNQDy5P79L5T\/36WoxvlN\/z0NJ5L\/3zRqAfZ3P8Ro8h\/7xoADbN3Y0n2U\/3qNQD7J6tSfZB\/eNFgENovqaabZexNMQn2Vfek+zIPWiwCG3T0ppgT0pgNMKelUyPnY9geKaAkUcU6gBGG4Yquw+bBpoD\/\/UyggpwQVyXAXYM04RilcCaOAN3qUWqdyT+NQ2xjxbJ7\/nTvsycdfzpXYDxbR+lSqoAxQMeqjHNOCjNIBwUU7aKYDttKBQAuBRjjpSAXAoxQMTbS7aADFGKBCYpDQAlIaAGGm0ANNNNADDTSaAIpX2IWqkFyR+tNATYooAKjlTcOOtAH\/\/1cvNOBrkAeBTgKkBwJHQ1bjJKjNSxjxThSAeKcKAHCnAUDHinUAKKWgBRS0AFFABS0gEooASkNADTTTQA0immgBjEDvTCw9RTEMMi\/3hUbSL6iiwXKs8okKqucA5NAwMVSQD6KQBSGkB\/9bLpQRXKBIvFOFQBJGNzCrQqWMXNPBHtSAUMPUfnTt6jqw\/OnYLjw6kcGnBh60crC5IvPSriWE7DJCr\/vH\/AAqlCTC6Kl3LHZS+XcMFbGR7j1quNTtjwHJPsKTiwuB1OAH+L\/vmmPrFtGpYh8D\/AGaOVhci\/wCEgtPSQf8AAaP7ftPSQ\/8AAafs5Bcli1WOYExRsQPXim3Ori2Tc8JOegzR7Ni5im3iJj923H4tTW8Qy\/wwJ+LVfsguRNr912SMfhUba7eHoYx\/wGn7JBcjOs3v\/PUf981G2qXjdZ2\/ACn7OIEZv7o9Z3\/Oka+umGDO+PY1XJECxYmSSbLO5CDue9XzWUtwEpyjmpARwKjoQDkbnBp9JjCkqQP\/1+Z8+T++aTzpP75rKyAXzpf+eho86T++350WQAJpO0jfnS+dL\/z0f\/vo0WQB50n\/AD0f\/vo06J2Mqgsxye5NFkDNIQ47oT\/vGnWe5Z2VBGSR607GdywjXZleNYNwHcHirUdrqrFc2LKueTuHA\/OmJtGvHHtIrXVtyBvUZprcdM5fxOC2oqFGT5K\/zasyKMwZ3L8\/v2rJ7spu7EdmbqaiddwINZjM2ZPLcjtSLWy1Bj1ZgflYj6GprxjtjViSQMkk0PcRXBopjENNoAKbQMKVfvc0Aa1jGUt8nq5zViud7gJTxwM0mBG7c4phoAaTg1NG+4e9DQDqKgZ\/\/9Dl3XY5Xrg02swDNLxQAAUtAC4pRjINIC6ssG3lEz9artJl9yfJ6YoTZNixa3k8RYozt+J4rUi1\/UhtxuYem081V7EuKZMNXvnPMIB6\/wCrNbGk6ld3EqQzQDZg5cAjH+elK73CFkXBZRzX73LndtOFXHTArH8QwMl8kiYCyL83HcUNe7chP3jHbPpUZz6VibFS7TIDHtVQda0jsBYhXdIKLlt0ze3FV1EQA4NLTGJnNFIBDSYoASpYU3uqj+I4oewzaAAAA6DpS1zAHWg0mBEeTTTTAYTSLJsOSeB1qrXAtKwdQynIIyKWs2M\/\/9HlzknJBpzBWwEGDWQEZBB5pVFMB3SjNAC5oFAGhEf3SnzoFyOhHIqOaJXO4zxsemFFMzLuiXjW0zwhwqPzyBkn8a3rHU4Zp1HmSybTggRf4CmhTWhqSvHJcqgU5wOqY\/nVpIlQcfnTIhHmGRr5UhXs3Ss\/U4XvLaQhSGjb5c8cUntYV9Uc0\/IzUdc50IilUMpHtWYRgkHtVwGWrPqznoBULc8nr1q1uQRmlB4plCUUAJRQAnetDT4\/mLn+EYFRPYZforABy0OcCkBC1RtVIBhqteybItgPLfyq47gO025x+6c8Hp9a1KiorMZ\/\/9Llw7DoaQknrWYCVIpUJ3zQwJo4WnQeWOagKkEg9RUp9AClqgLUM7xxAKsZA9RzT2kE2DJIqkdguKZnYWzuzZX8VyqLJ5bE7W4DAgg\/oa3NBvIJdXmkCpaJJ84TfnnHIz9eaaCWx0D3cX2o4kQ7cDg5q2s0bDIdfzqiIy5dytPcgSKyk4X9askZZl2\/eHWgh7HF3IKzyqeoc\/zquetczOhDWrPuk2yZ7GnHcoev7u093NRmtEQRtTaYxaKBjaKAHIMsK2LePy4VXv1P1NZzYyWisQH9BUbHJpARsajNUgGGsueTzZWbt0H0rWIDVJVgR2rcs7gTxDP3h1pVFdXA\/9PlqKzAQ0ooA0dPGSAPfiqLcs2PU1C3YBgnoDShGPRT+VWIt2oZA25B6\/MKsbjjov4f\/rqjN7lCXPmN9ataa6pdxySMAE+b5hkE+9J6Iq1zpoJIZkE0cSKH5wFqwsgUfKAPpTMrDWkJ61owz7rJJM8xkA\/ypoUtjnNYTy79mHRxms4nmsJbm0XoIelVrlN6cdqS3KIbo7RGn90ZqIHIrVCA0ymAUZoGJRQBaso98gJHANalYz3GLSr1rMBWOBUVADGqMmqQFW8k2RbQeW\/lVCto7AFTWs5gmDDp3ptXQH\/\/1OeuLO4tuZ4XQepHH51FGFMiBvulhn6Z5rJNS2A0dbsYbK6hSEEK6ZIJ96y+hpiNHTjjLeik1VY4XNTH4mDLBXZx2pwH1\/L\/AOtWhDFXAY8sPpmlfcQAjuv4kUCKcoYSHccn1oU4pFnR6OT9hUnuT\/Or+6mZiE1e0+NpLefnA6YoE1dGbqiebZpLj5kODWM1ZT3LhsNpuMmoLM+5yZ2z9KYprZALmkIpiEoHNAwpKANSyi2RAnq3NWq55bjCnjgVLAYxzTWoAiamH3q0Bl3EnmSkjoOBUdbLYBKKYH\/\/2Q==<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3059\u308b\u3068\u3001\u3069\u3046\u3067\u3057\u3087\u3046\uff01\u753b\u50cf\u304c\u8868\u793a\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u304b\uff1f<br><a href=\"https:\/\/allabout.co.jp\/gm\/gc\/23977\/\">HTML\u30d5\u30a1\u30a4\u30eb\u306e\u4e2d\u306b\u753b\u50cf\u3092\u57cb\u3081\u8fbc\u3093\u3067\u8868\u793a\u3055\u305b\u308b\u65b9\u6cd5<\/a>\u304c\u3042\u308a\u307e\u3057\u3066\u3001\u3053\u308c\u3092\u5229\u7528\u3057\u3066\u3044\u307e\u3059\u3002\u8a73\u7d30\u306f\u3001\u30ea\u30f3\u30af\u306e\u8a18\u4e8b\u8aad\u3093\u3067\u306d\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9<\/h2>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n\/\/ M5STICK-C\u3068Grove - Serial Camera Ki\u3092\u7e4b\u3044\u3067\u3001\u6587\u5b57\u5217(Base64)\u3067\u3001\u5199\u771f\u3092\u53d6\u5f97\u3059\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\n\/\/ Programed by Kazuyuki Eguchi\n\n#include &amp;lt;M5StickC.h&gt;\n\n#include &amp;lt;base64.h&gt;\n\n#define PIC_MAX_SIZE 10000\n\n#define PIC_PKT_LEN    128        \/\/data length of each read, dont set this too big because ram is limited\n#define PIC_FMT_VGA    7\n#define PIC_FMT_CIF    5\n#define PIC_FMT_OCIF   3\n#define CAM_ADDR       0\n\n#define PIC_FMT        PIC_FMT_CIF\n\nHardwareSerial CAM_SERIAL(1);\n\nconst byte cameraAddr = (CAM_ADDR &amp;lt;&amp;lt; 5);  \/\/ addr\nunsigned long picTotalLen = 0;            \/\/ picture length\n\nunsigned char image_data&#x5B;PIC_MAX_SIZE];\nunsigned long image_length = 0;\n\nvoid setup() {\n  M5.begin();\n  \n  CAM_SERIAL.begin(9600, SERIAL_8N1, 33, 32);        \/\/ GROVE\u7aef\u5b50\u306e\u5834\u5408\n\n  initialize();\n  preCapture();\n}\n\nvoid loop() {\n  Capture();\n  GetData();\n}\n\nvoid clearRxBuf()\n{\n  while (CAM_SERIAL.available()) \n  {\n    CAM_SERIAL.read(); \n  }\n}\n\nvoid sendCmd(char cmd&#x5B;], int cmd_len)\n{\n  for (char i = 0; i &amp;lt; cmd_len; i++) CAM_SERIAL.write(cmd&#x5B;i]); \n}\n\nint readBytes(char *dest, int len, unsigned int timeout)\n{\n  int read_len = 0;\n  unsigned long t = millis();\n  while (read_len &amp;lt; len)\n  {\n    while (CAM_SERIAL.available()&amp;lt;1)\n    {\n      if ((millis() - t) &gt; timeout)\n      {\n        return read_len;\n      }\n    }\n    *(dest+read_len) = CAM_SERIAL.read();\n    \/\/ Serial.write(*(dest+read_len));\n    read_len++;\n  }\n  return read_len;\n}\n\nvoid initialize()\n{   \n  char cmd&#x5B;] = {0xaa,0x0d|cameraAddr,0x00,0x00,0x00,0x00} ;  \n  unsigned char resp&#x5B;6];\n\n  Serial.print(&quot;initializing camera...&quot;);\n  \n  while (1) \n  {\n    sendCmd(cmd,6);\n    if (readBytes((char *)resp, 6,1000) != 6)\n    {\n      Serial.print(&quot;.&quot;);\n      continue;\n    }\n    if (resp&#x5B;0] == 0xaa &amp;amp;&amp;amp; resp&#x5B;1] == (0x0e | cameraAddr) &amp;amp;&amp;amp; resp&#x5B;2] == 0x0d &amp;amp;&amp;amp; resp&#x5B;4] == 0 &amp;amp;&amp;amp; resp&#x5B;5] == 0) \n    {\n      if (readBytes((char *)resp, 6, 500) != 6) continue; \n      if (resp&#x5B;0] == 0xaa &amp;amp;&amp;amp; resp&#x5B;1] == (0x0d | cameraAddr) &amp;amp;&amp;amp; resp&#x5B;2] == 0 &amp;amp;&amp;amp; resp&#x5B;3] == 0 &amp;amp;&amp;amp; resp&#x5B;4] == 0 &amp;amp;&amp;amp; resp&#x5B;5] == 0) break; \n    }\n  }  \n  cmd&#x5B;1] = 0x0e | cameraAddr;\n  cmd&#x5B;2] = 0x0d;\n  sendCmd(cmd, 6); \n  \/\/Serial.println(&quot;\\nCamera initialization done.&quot;);\n}\n\nvoid preCapture()\n{\n  char cmd&#x5B;] = { 0xaa, 0x01 | cameraAddr, 0x00, 0x07, 0x00, PIC_FMT };  \n  unsigned char resp&#x5B;6]; \n  \n  while (1)\n  {\n    clearRxBuf();\n    sendCmd(cmd, 6);\n    if (readBytes((char *)resp, 6, 100) != 6) continue; \n    if (resp&#x5B;0] == 0xaa &amp;amp;&amp;amp; resp&#x5B;1] == (0x0e | cameraAddr) &amp;amp;&amp;amp; resp&#x5B;2] == 0x01 &amp;amp;&amp;amp; resp&#x5B;4] == 0 &amp;amp;&amp;amp; resp&#x5B;5] == 0) break; \n  }\n}\n\nvoid Capture()\n{\n  char cmd&#x5B;] = { 0xaa, 0x06 | cameraAddr, 0x08, PIC_PKT_LEN &amp;amp; 0xff, (PIC_PKT_LEN&gt;&gt;8) &amp;amp; 0xff ,0}; \n  unsigned char resp&#x5B;6];\n\n  while (1)\n  {\n    clearRxBuf();\n    sendCmd(cmd, 6);\n    if (readBytes((char *)resp, 6, 100) != 6) continue;\n    if (resp&#x5B;0] == 0xaa &amp;amp;&amp;amp; resp&#x5B;1] == (0x0e | cameraAddr) &amp;amp;&amp;amp; resp&#x5B;2] == 0x06 &amp;amp;&amp;amp; resp&#x5B;4] == 0 &amp;amp;&amp;amp; resp&#x5B;5] == 0) break; \n  }\n  cmd&#x5B;1] = 0x05 | cameraAddr;\n  cmd&#x5B;2] = 0;\n  cmd&#x5B;3] = 0;\n  cmd&#x5B;4] = 0;\n  cmd&#x5B;5] = 0; \n  while (1)\n  {\n    clearRxBuf();\n    sendCmd(cmd, 6);\n    if (readBytes((char *)resp, 6, 100) != 6) continue;\n    if (resp&#x5B;0] == 0xaa &amp;amp;&amp;amp; resp&#x5B;1] == (0x0e | cameraAddr) &amp;amp;&amp;amp; resp&#x5B;2] == 0x05 &amp;amp;&amp;amp; resp&#x5B;4] == 0 &amp;amp;&amp;amp; resp&#x5B;5] == 0) break;\n  }\n  cmd&#x5B;1] = 0x04 | cameraAddr;\n  cmd&#x5B;2] = 0x1;\n  while (1) \n  {\n    clearRxBuf();\n    sendCmd(cmd, 6);\n    if (readBytes((char *)resp, 6, 100) != 6) continue;\n    if (resp&#x5B;0] == 0xaa &amp;amp;&amp;amp; resp&#x5B;1] == (0x0e | cameraAddr) &amp;amp;&amp;amp; resp&#x5B;2] == 0x04 &amp;amp;&amp;amp; resp&#x5B;4] == 0 &amp;amp;&amp;amp; resp&#x5B;5] == 0)\n    {\n      if (readBytes((char *)resp, 6, 1000) != 6)\n      {\n        continue;\n      }\n      if (resp&#x5B;0] == 0xaa &amp;amp;&amp;amp; resp&#x5B;1] == (0x0a | cameraAddr) &amp;amp;&amp;amp; resp&#x5B;2] == 0x01)\n      {\n        picTotalLen = (resp&#x5B;3]) | (resp&#x5B;4] &amp;lt;&amp;lt; 8) | (resp&#x5B;5] &amp;lt;&amp;lt; 16); \n        Serial.print(&quot;picTotalLen:&quot;);\n        Serial.println(picTotalLen);\n        break;\n      }\n    }\n  }  \n}\n\nvoid GetData()\n{\n  unsigned int pktCnt = (picTotalLen) \/ (PIC_PKT_LEN - 6); \n  if ((picTotalLen % (PIC_PKT_LEN-6)) != 0) pktCnt += 1;\n  \n  char cmd&#x5B;] = { 0xaa, 0x0e | cameraAddr, 0x00, 0x00, 0x00, 0x00 };  \n  unsigned char pkt&#x5B;PIC_PKT_LEN];\n\n  image_length = 0;\n  \n  for (unsigned int i = 0; i &amp;lt; pktCnt; i++)\n  {\n    cmd&#x5B;4] = i &amp;amp; 0xff;\n    cmd&#x5B;5] = (i &gt;&gt; 8) &amp;amp; 0xff;\n    \n    int retry_cnt = 0;\n  retry:\n    delay(10);\n    clearRxBuf(); \n    sendCmd(cmd, 6); \n    uint16_t cnt = readBytes((char *)pkt, PIC_PKT_LEN, 200);\n    \n    unsigned char sum = 0; \n    for (int y = 0; y &amp;lt; cnt - 2; y++)\n    {\n      sum += pkt&#x5B;y];\n    }\n    if (sum != pkt&#x5B;cnt-2])\n    {\n      if (++retry_cnt &amp;lt; 100) goto retry;\n      else break;\n    }\n\n    if(picTotalLen &amp;lt; PIC_MAX_SIZE)\n    {\n      int co;\n      for(co = 0; co &amp;lt; (cnt-6) ; co++)\n      {\n        image_data&#x5B;image_length] = pkt&#x5B;co + 4];\n        image_length++;\n      }\n    }\n  }\n\n  if(picTotalLen &amp;lt; PIC_MAX_SIZE)\n  {\n    Serial.print(&quot;data:image\/jpeg;base64,&quot;);\n    String encoded = base64::encode(image_data, image_length);\n    Serial.println(encoded);\n  }\n  \n  cmd&#x5B;4] = 0xf0;\n  cmd&#x5B;5] = 0xf0; \n  sendCmd(cmd, 6); \n}\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">\u52d5\u4f5c\u7d50\u679c\uff08\u4f8b\uff09\u30c7\u30d0\u30c3\u30b0\u30ed\u30b0\u4e0a<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"701\" height=\"1024\" src=\"https:\/\/eguchi.jp\/blog\/wp-content\/uploads\/2019\/06\/190613-0002-701x1024.png\" alt=\"\" class=\"wp-image-1219\" srcset=\"https:\/\/eguchi.jp\/blog\/wp-content\/uploads\/2019\/06\/190613-0002-701x1024.png 701w, https:\/\/eguchi.jp\/blog\/wp-content\/uploads\/2019\/06\/190613-0002-205x300.png 205w, https:\/\/eguchi.jp\/blog\/wp-content\/uploads\/2019\/06\/190613-0002-768x1122.png 768w, https:\/\/eguchi.jp\/blog\/wp-content\/uploads\/2019\/06\/190613-0002.png 908w\" sizes=\"auto, (max-width: 701px) 100vw, 701px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u4ee5\u4e0a\u3001\u3054\u53c2\u8003\u307e\u3067\u306b<\/p>\n","protected":false},"excerpt":{"rendered":"<p>UART\u63a5\u7d9a\u3092\u3055\u3089\u306b\u8ffd\u6c42\u3059\u308b\u305f\u3081\u306b\u3001\u307e\u305f\u3001\u624b\u5143\u306b\u3042\u3063\u305fGrove &#8211; Serial Camera Kit\u3092\u3001M5STICK-C\u306eGROVE\u7aef\u5b50\u306b\u63a5\u7d9a\u3057\u3066\u3001\u5199\u771f\u3092\u53d6\u5f97\u3057\u3066\u307f\u3088\u3046\u3068\u601d\u3063\u305f\u3002 \u4e00\u822c\u306e\u65b9\u306f\u3001\u64ae\u5f71\u3057\u305f\u5199 &hellip; <a href=\"https:\/\/eguchi.jp\/blog\/?p=1216\" class=\"more-link\">\u7d9a\u304d\u3092\u8aad\u3080 <span class=\"screen-reader-text\">M5STICK-C\u3068\u30b7\u30ea\u30a2\u30eb\u30ab\u30e1\u30e9\u3092\u7e4b\u3044\u3067\u307f\u305f<\/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":[2],"tags":[],"class_list":["post-1216","post","type-post","status-publish","format-standard","hentry","category-2"],"_links":{"self":[{"href":"https:\/\/eguchi.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1216","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/eguchi.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/eguchi.jp\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/eguchi.jp\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/eguchi.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1216"}],"version-history":[{"count":6,"href":"https:\/\/eguchi.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1216\/revisions"}],"predecessor-version":[{"id":1224,"href":"https:\/\/eguchi.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1216\/revisions\/1224"}],"wp:attachment":[{"href":"https:\/\/eguchi.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1216"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/eguchi.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1216"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/eguchi.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1216"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}