{"id":7875,"date":"2024-01-02T20:58:42","date_gmt":"2024-01-02T11:58:42","guid":{"rendered":"https:\/\/www.tapoblog.0t0.jp\/?p=7875"},"modified":"2024-01-02T21:48:40","modified_gmt":"2024-01-02T12:48:40","slug":"%e3%83%8f%e3%83%b3%e3%82%b3%e3%83%b3%e3%83%a9%e3%82%b8%e3%82%b3%e3%83%b3%e3%81%ae%e9%9b%91%e3%81%aa%e8%a7%a3%e8%aa%ac","status":"publish","type":"post","link":"https:\/\/www.tapoblog.0t0.jp\/?p=7875","title":{"rendered":"\u30cf\u30f3\u30b3\u30f3\u30e9\u30b8\u30b3\u30f3\u306e\u96d1\u306a\u89e3\u8aac"},"content":{"rendered":"\n<p>\u65b0\u5e74\u65e9\u3005\u5730\u9707\u3084\u3089\u98db\u884c\u6a5f\u4e8b\u6545\u3084\u3089\u30e4\u30d9\u30fc\u6620\u50cf\u304c\u98db\u3073\u8fbc\u3093\u3067\u304f\u308b\u3051\u3069\u3001\u6211\u304c\u5bb6\u306f\u5e73\u5e38\u904b\u8ee2\u3002\u4eca\u5e74\u3082\u3088\u308d\u3057\u304f\u3002<\/p>\n\n\n\n<p>\u4ee5\u524d\u306b\u3082\u66f8\u3044\u305f\u6c17\u304c\u3059\u308b\u3051\u3069\u3001\u306a\u305c\u304b\u4ffa\u306eYouTube\u30c1\u30e3\u30f3\u30cd\u30eb\u3067\u518d\u751f\u56de\u6570\u6700\u5927\u306a\u306e\u306f\u3001\u4f1a\u793e\u306e\u91d1\u3067<s>\u904a\u3093\u3060<\/s>\u304a\u52c9\u5f37\u3057\u305f\u30cf\u30f3\u30b3\u30f3\u30e9\u30b8\u30b3\u30f3\u306e\u52d5\u753b(\u73fe\u6642\u70b9\u3067\u518d\u751f\u56de\u65708.2\u4e07\u56de)\u3002\u3042\u308b\u6642\u30a4\u30f3\u30c9\u4eba(\uff1f)\u304c\u5927\u6319\u3057\u3066\u62bc\u3057\u5bc4\u305b\u3066\u304d\u3066\u300c\u304f\u308c\u304f\u308c\u300d\u30b3\u30e1\u30f3\u30c8\u304c\u4ed8\u3044\u305f\u308a\u3082\u3057\u305f(\u7b11<\/p>\n\n\n\n<figure class=\"wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"2018\/10\/03 \u30cf\u30f3\u30b3\u30f3\u3067\u30e9\u30b8\u30b3\u30f3(3\u901fMT)\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/HOs2SzybbhI?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>\u305d\u3057\u3066\u6700\u8fd1\u306b\u306a\u3063\u3066\u3001\u96a3\u306e\u90e8(\u3068\u3044\u3046\u304b\u5f53\u6642\u306e\u90e8\u306e\u5f8c\u7d99\u306e\u90e8)\u306e\u30af\u30eb\u30de\u4ef2\u9593\u306e\u82e5\u8005\u304c\u540c\u3058\u3088\u3046\u306a\u3053\u3068\u3092\u3084\u308d\u3046\u3057\u3066\u4ffa\u306e\u30d6\u30ed\u30b0\u3084\u52d5\u753b\u306b\u6d41\u308c\u7740\u3044\u305f\u305d\u3046\u306a(\u7206<\/p>\n\n\n\n<p>\u305d\u3046\u304b\u3068\u601d\u3048\u3070\u3001\u540c\u3058\u3088\u3046\u306a\u30bf\u30a4\u30df\u30f3\u30b0\u3067\u3053\u306e\u52d5\u753b\u306b\u307e\u305f\u30b3\u30e1\u30f3\u30c8\u304c\u4ed8\u3044\u3066\u3001\u306a\u3093\u304b\u6559\u3048\u3066\u6b32\u3057\u3044\u3063\u307d\u3044\u306e\u3067\u3001\u3061\u3087\u3063\u3068\u8272\u3005\u6398\u308a\u8d77\u3053\u3057\u3066\u307f\u305f\u3002<\/p>\n\n\n\n<p>\u307e\u305a\u306f\u4f7f\u3063\u305f\u6750\u6599\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30e9\u30b8\u30b3\u30f3\uff1a<a href=\"https:\/\/www.tamiya.com\/japan\/products\/58397\/index.html\" target=\"_blank\" rel=\"noreferrer noopener\">\u30bf\u30df\u30e4\u306e\u30cf\u30a4\u30e9\u30c3\u30af\u30b9\u30cf\u30a4\u30ea\u30d5\u30c8<\/a>(\u30d7\u30ed\u30dd\u3067\u30b7\u30d5\u30c8\u30c1\u30a7\u30f3\u30b8\u3067\u304d\u308b\u3084\u3064)<\/li>\n\n\n\n<li>\u30d7\u30ed\u30dd\uff1a\u30d5\u30bf\u30d0\u306e4ch\u306e\u30e4\u30c4<a href=\"https:\/\/www.rc.futaba.co.jp\/products\/detail\/I00000026\" target=\"_blank\" rel=\"noreferrer noopener\">ATTACK 4YWD<\/a>(\u30b5\u30fc\u30dc\u306f\u305d\u306e\u307e\u307e\u5229\u7528\u3002\u30d7\u30ed\u30dd\u30fb\u53d7\u4fe1\u6a5f\u306f\u4f7f\u308f\u306a\u3044\u3002ESC\u3082MFC-02\u3092\u5229\u7528\u3002)<\/li>\n\n\n\n<li><a href=\"https:\/\/www.tamiya.com\/japan\/products\/53957\/index.html\" target=\"_blank\" rel=\"noreferrer noopener\">\u30de\u30eb\u30c1\u30d5\u30a1\u30f3\u30af\u30b7\u30e7\u30f3\u30e6\u30cb\u30c3\u30c8MFC-02<\/a><\/li>\n\n\n\n<li>\u30e9\u30b8\u30b3\u30f3\u5074\u306e\u30e9\u30ba\u30d1\u30a4\uff1aRaspberry Pi Zero W\u3068\u30e6\u30cb\u30d0\u30fc\u30b5\u30eb\u57fa\u76e4<\/li>\n\n\n\n<li>\u30b9\u30c6\u30a2\u30ea\u30f3\u30b0\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\uff1a\u30d7\u30ec\u30b9\u30c63\u7528\u306eUSB\u63a5\u7d9a\u306e\u30e4\u30c4(Logicool Driving Force GT)<\/li>\n\n\n\n<li>\u30cf\u30f3\u30b3\u30f3\u5074\u306e\u30e9\u30ba\u30d1\u30a4\uff1aRaspberry Pi 2 (\u5225\u306b\u3069\u308c\u3067\u3082\u3044\u3044\u306f\u305a)<\/li>\n<\/ul>\n\n\n\n<p>\u3046\u3080\u3001\u3060\u3044\u3076\u5fd8\u308c\u3066\u308b\u3002\u305d\u3082\u305d\u3082\u30e9\u30b8\u30b3\u30f3\u306b\u8f09\u305b\u3066\u305fRaspberry Pi Zero W\u306e\u30ed\u30b0\u30a4\u30f3\u30d1\u30b9\u30ef\u30fc\u30c9\u5fd8\u308c\u3066\u3066\u96e3\u5100\u3057\u305f\u3002(\u00b4\u30fb\u03c9\u30fb`)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u30e9\u30b8\u30b3\u30f3\u5074\u306e\u30e9\u30ba\u30d1\u30a4\u3092\u63a5\u7d9a\u3059\u308b\u56de\u8def(\u96fb\u6e90\uff06\u30b5\u30fc\u30dc\u3084ESC\u306e\u4fe1\u53f7\u7dda)<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/www.tapoblog.0t0.jp\/wp-content\/uploads\/2024\/01\/20240102_zero.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" data-attachment-id=\"7876\" data-permalink=\"https:\/\/www.tapoblog.0t0.jp\/?attachment_id=7876\" data-orig-file=\"https:\/\/www.tapoblog.0t0.jp\/wp-content\/uploads\/2024\/01\/20240102_zero.jpg\" data-orig-size=\"1280,720\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;1.89&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;Pixel 7a&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1704215104&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;5.43&quot;,&quot;iso&quot;:&quot;203&quot;,&quot;shutter_speed&quot;:&quot;0.033337&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}\" data-image-title=\"20240102_zero\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/www.tapoblog.0t0.jp\/wp-content\/uploads\/2024\/01\/20240102_zero-1024x576.jpg\" src=\"https:\/\/www.tapoblog.0t0.jp\/wp-content\/uploads\/2024\/01\/20240102_zero-1024x576.jpg\" alt=\"\" class=\"wp-image-7876\" srcset=\"https:\/\/www.tapoblog.0t0.jp\/wp-content\/uploads\/2024\/01\/20240102_zero-1024x576.jpg 1024w, https:\/\/www.tapoblog.0t0.jp\/wp-content\/uploads\/2024\/01\/20240102_zero-300x169.jpg 300w, https:\/\/www.tapoblog.0t0.jp\/wp-content\/uploads\/2024\/01\/20240102_zero-768x432.jpg 768w, https:\/\/www.tapoblog.0t0.jp\/wp-content\/uploads\/2024\/01\/20240102_zero.jpg 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p>\u3061\u3087\u3063\u3068\u56de\u8def\u56f3\u3069\u3063\u304b\u884c\u3063\u3066\u3057\u307e\u3063\u305f\u3051\u3069\u3001\u30e9\u30ba\u30d1\u30a4Zero\u7528\u306e\u30e6\u30cb\u30d0\u30fc\u30b5\u30eb\u57fa\u76e4\u3067\u3001\u30e9\u30b8\u30b3\u30f3\u306e7.2V\u304b\u3089\u30e9\u30ba\u30d1\u30a4\u7528\u306e5V\u96fb\u6e90\u3092\u53d6\u308a\u51fa\u3057\u3064\u3064(3\u7aef\u5b50\u30ec\u30ae\u30e5\u30ec\u30fc\u30bf\u306e\u578b\u756a\u5fd8\u308c\u305f\u2026)\u3001GPIO\u306b\u30e9\u30b8\u30b3\u30f3\u306e4ch\u5206\u306e\u30b5\u30fc\u30dc\u30fbESC\u4fe1\u53f7\u7dda\u3068\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306e\u30b3\u30cd\u30af\u30bf(3pin\u00d74)\u3092\u914d\u7f6e\u3002<\/p>\n\n\n\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr><td><div style=\"border:1px solid #95a5a6;border-radius:.75rem;background-color:#FFFFFF;width:504px;margin:0px;padding:5px;text-align:center;overflow:hidden;\"><table><tr><td style=\"width:240px\"><a href=\"https:\/\/hb.afl.rakuten.co.jp\/ichiba\/382c63af.e4933057.382c63b0.f40929d1\/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fmonju%2Fsan-ub-rpi03%2F&#038;link_type=picttext&#038;ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D\" target=\"_blank\" rel=\"nofollow sponsored noopener\" style=\"word-wrap:break-word;\"><img decoding=\"async\" src=\"https:\/\/hbb.afl.rakuten.co.jp\/hgb\/382c63af.e4933057.382c63b0.f40929d1\/?me_id=1203145&#038;item_id=10168883&#038;pc=https%3A%2F%2Fthumbnail.image.rakuten.co.jp%2F%400_mall%2Fmonju%2Fcabinet%2Fsunhayato%2Fub-rpi03.jpg%3F_ex%3D240x240&#038;s=240x240&#038;t=picttext\" border=\"0\" style=\"margin:2px\" alt=\"[\u5546\u54c1\u4fa1\u683c\u306b\u95a2\u3057\u307e\u3057\u3066\u306f\u3001\u30ea\u30f3\u30af\u304c\u4f5c\u6210\u3055\u308c\u305f\u6642\u70b9\u3068\u73fe\u6642\u70b9\u3067\u60c5\u5831\u304c\u5909\u66f4\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u304c\u3054\u3056\u3044\u307e\u3059\u3002]\" title=\"[\u5546\u54c1\u4fa1\u683c\u306b\u95a2\u3057\u307e\u3057\u3066\u306f\u3001\u30ea\u30f3\u30af\u304c\u4f5c\u6210\u3055\u308c\u305f\u6642\u70b9\u3068\u73fe\u6642\u70b9\u3067\u60c5\u5831\u304c\u5909\u66f4\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u304c\u3054\u3056\u3044\u307e\u3059\u3002]\"><\/a><\/td><td style=\"vertical-align:top;width:248px;display: block;\"><p style=\"font-size:12px;line-height:1.4em;text-align:left;margin:0px;padding:2px 6px;word-wrap:break-word\"><a href=\"https:\/\/hb.afl.rakuten.co.jp\/ichiba\/382c63af.e4933057.382c63b0.f40929d1\/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fmonju%2Fsan-ub-rpi03%2F&#038;link_type=picttext&#038;ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D\" target=\"_blank\" rel=\"nofollow sponsored noopener\" style=\"word-wrap:break-word;\">\u30b5\u30f3\u30cf\u30e4\u30c8(Sunhayato)\u3000RaspberryPi(\u30e9\u30ba\u30d9\u30ea\u30fc\u30d1\u30a4)\u7528\u30e6\u30cb\u30d0\u30fc\u30b5\u30eb\u57fa\u677f\u3000UB-RPI03<\/a><br><span >\u4fa1\u683c\uff1a1,166\u5186\uff08\u7a0e\u8fbc\u3001\u9001\u6599\u7121\u6599)<\/span> <span style=\"color:#BBB\">(2024\/1\/2\u6642\u70b9)<\/span><\/p><div style=\"margin:10px;\"><a href=\"https:\/\/hb.afl.rakuten.co.jp\/ichiba\/382c63af.e4933057.382c63b0.f40929d1\/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fmonju%2Fsan-ub-rpi03%2F&#038;link_type=picttext&#038;ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D\" target=\"_blank\" rel=\"nofollow sponsored noopener\" style=\"word-wrap:break-word;\"><img decoding=\"async\" src=\"https:\/\/static.affiliate.rakuten.co.jp\/makelink\/rl.svg\" style=\"float:left;max-height:27px;width:auto;margin-top:0\" ><\/a><a href=\"https:\/\/hb.afl.rakuten.co.jp\/ichiba\/382c63af.e4933057.382c63b0.f40929d1\/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fmonju%2Fsan-ub-rpi03%2F%3Fscid%3Daf_pc_bbtn&#038;link_type=picttext&#038;ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ==\" target=\"_blank\" rel=\"nofollow sponsored noopener\" style=\"word-wrap:break-word;\"><div style=\"float:right;width:41%;height:27px;background-color:#bf0000;color:#fff!important;font-size:12px;font-weight:500;line-height:27px;margin-left:1px;padding: 0 12px;border-radius:16px;cursor:pointer;text-align:center;\"> \u697d\u5929\u3067\u8cfc\u5165 <\/div><\/a><\/div><\/td><\/tr><\/table><\/div><br><p style=\"color:#000000;font-size:12px;line-height:1.4em;margin:5px;word-wrap:break-word\"><\/p><\/td><\/tr><\/table>\n\n\n\n<p>\u30e9\u30b8\u30b3\u30f3\u5074\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u30bd\u30fc\u30b9\u3092\u898b\u305f\u3068\u3053\u308d\u3001\u4f7f\u3063\u305fGPIO\u306f6, 13, 19, 26\u756a(BCM\u756a\u53f7)\u3060\u3063\u305f\u3088\u3046\u3060\u3002<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.tapoblog.0t0.jp\/wp-content\/uploads\/2024\/01\/20240102_upper.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" data-attachment-id=\"7877\" data-permalink=\"https:\/\/www.tapoblog.0t0.jp\/?attachment_id=7877\" data-orig-file=\"https:\/\/www.tapoblog.0t0.jp\/wp-content\/uploads\/2024\/01\/20240102_upper.jpg\" data-orig-size=\"1280,720\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;1.89&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;Pixel 7a&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1704215138&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;5.43&quot;,&quot;iso&quot;:&quot;499&quot;,&quot;shutter_speed&quot;:&quot;0.041663&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}\" data-image-title=\"20240102_upper\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/www.tapoblog.0t0.jp\/wp-content\/uploads\/2024\/01\/20240102_upper-1024x576.jpg\" data-id=\"7877\" src=\"https:\/\/www.tapoblog.0t0.jp\/wp-content\/uploads\/2024\/01\/20240102_upper-1024x576.jpg\" alt=\"\" class=\"wp-image-7877\" srcset=\"https:\/\/www.tapoblog.0t0.jp\/wp-content\/uploads\/2024\/01\/20240102_upper-1024x576.jpg 1024w, https:\/\/www.tapoblog.0t0.jp\/wp-content\/uploads\/2024\/01\/20240102_upper-300x169.jpg 300w, https:\/\/www.tapoblog.0t0.jp\/wp-content\/uploads\/2024\/01\/20240102_upper-768x432.jpg 768w, https:\/\/www.tapoblog.0t0.jp\/wp-content\/uploads\/2024\/01\/20240102_upper.jpg 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.tapoblog.0t0.jp\/wp-content\/uploads\/2024\/01\/20240102_lower.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" data-attachment-id=\"7878\" data-permalink=\"https:\/\/www.tapoblog.0t0.jp\/?attachment_id=7878\" data-orig-file=\"https:\/\/www.tapoblog.0t0.jp\/wp-content\/uploads\/2024\/01\/20240102_lower.jpg\" data-orig-size=\"1280,720\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;1.89&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;Pixel 7a&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1704215157&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;5.43&quot;,&quot;iso&quot;:&quot;464&quot;,&quot;shutter_speed&quot;:&quot;0.041663&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}\" data-image-title=\"20240102_lower\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/www.tapoblog.0t0.jp\/wp-content\/uploads\/2024\/01\/20240102_lower-1024x576.jpg\" data-id=\"7878\" src=\"https:\/\/www.tapoblog.0t0.jp\/wp-content\/uploads\/2024\/01\/20240102_lower-1024x576.jpg\" alt=\"\" class=\"wp-image-7878\" srcset=\"https:\/\/www.tapoblog.0t0.jp\/wp-content\/uploads\/2024\/01\/20240102_lower-1024x576.jpg 1024w, https:\/\/www.tapoblog.0t0.jp\/wp-content\/uploads\/2024\/01\/20240102_lower-300x169.jpg 300w, https:\/\/www.tapoblog.0t0.jp\/wp-content\/uploads\/2024\/01\/20240102_lower-768x432.jpg 768w, https:\/\/www.tapoblog.0t0.jp\/wp-content\/uploads\/2024\/01\/20240102_lower.jpg 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/figure>\n\n\n\n<p>\u30e9\u30b8\u30b3\u30f3\u306e\u30d0\u30c3\u30c6\u30ea\u30fc\u304b\u3089\u306e\u914d\u7dda\u53d6\u308a\u51fa\u3057\u306f\u3001\u4f55\u304b\u3067\u898b\u304b\u3051\u305f<a href=\"https:\/\/www.amazon.co.jp\/gp\/product\/B005AFBJPU\/\">\u5206\u5c90\u30b3\u30cd\u30af\u30bf<\/a>\u3092\u5229\u7528\u3002\u30b3\u30cd\u30af\u30bf\u306e\u7a2e\u985e\u304c\u5206\u304b\u3089\u306a\u304f\u3066\u3001\u3069\u3053\u304b\u306e\u96fb\u5b50\u30d1\u30fc\u30c4\u5c4b\u3055\u3093\u306e\u901a\u8ca9\u30b5\u30a4\u30c8\u3067\u898b\u305f\u76ee\u306e\u8fd1\u305d\u3046\u306a\u30e4\u30c4\u3092\u3044\u304f\u3064\u304b\u8cb7\u3063\u3066\u898b\u3064\u3051\u305f\u3093\u3060\u3051\u3069\u3001\u7d50\u5c40\u3069\u308c\u3060\u3063\u305f\u3063\u3051\uff1f<a href=\"https:\/\/eleshop.jp\/shop\/g\/g5CP14H\/\" target=\"_blank\" rel=\"noreferrer noopener\">\u3053\u308c(EH\u30b3\u30cd\u30af\u30bf)<\/a>\u3060\u3063\u305f\u304b\u306a\u3042\uff1f<\/p>\n\n\n\n<p>\u3046\u30fc\u3093\u3001\u30bf\u30a4\u30c8\u30eb\u901a\u308a\u96d1\u306a\u60c5\u5831\u3060\u2026\u3002\u307e\u3042\u3044\u3044\u3084\u3001\u6b21\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u30e9\u30b8\u30b3\u30f3(\u30b5\u30fc\u30d0)\u5074\u306e\u30d7\u30ed\u30b0\u30e9\u30e0<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>UDP\u3067\u53d7\u4fe1\u3057\u305f\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u306b\u5fdc\u3058\u3066GPIO\u306bPWM\u4fe1\u53f7\u3092\u51fa\u529b\u3059\u308b<\/li>\n\n\n\n<li>UDP\u306e\u53d7\u4fe1\u306f<a href=\"https:\/\/qiita.com\/tajima_taso\/items\/fdfed88c1e735ffb41e8\" target=\"_blank\" rel=\"noreferrer noopener\">\u3053\u3061\u3089\u306e\u30da\u30fc\u30b8<\/a>\u306e\u30bd\u30fc\u30b9\u3092\u307e\u306d\u3057\u305f<\/li>\n\n\n\n<li>GPIO\u306ePWM\u4fe1\u53f7\u51fa\u529b\u306f\u3001pigpio\u306egpioServo()\u3092\u5229\u7528<\/li>\n\n\n\n<li>\u30a2\u30af\u30bb\u30eb\u30da\u30c0\u30eb\u306e\u30a2\u30ca\u30ed\u30b0\u5024\u306b\u5fdc\u3058\u3066\u30e2\u30fc\u30bf\u30fc\u3092\u56de\u8ee2<\/li>\n\n\n\n<li>\u30b9\u30c6\u30a2\u30ea\u30f3\u30b0\u306e\u30a2\u30ca\u30ed\u30b0\u5024\u306b\u5fdc\u3058\u3066\u30b9\u30c6\u30a2\u30ea\u30f3\u30b0\u306e\u30b5\u30fc\u30dc\u3092\u56de\u8ee2<\/li>\n\n\n\n<li>\u30b7\u30d5\u30c8Up\/Down\u306e\u30dc\u30bf\u30f3\u306b\u5fdc\u3058\u3066\u30b7\u30d5\u30c8\u6bb5\u3092\u52a0\u6e1b\u7b97(-1,0,1,2,3)\u3001\u30b7\u30d5\u30c8\u6bb5\u306b\u5fdc\u3058\u305f\u4f4d\u7f6e\u306b\u30df\u30c3\u30b7\u30e7\u30f3\u7528\u30b5\u30fc\u30dc\u3092\u56de\u8ee2(\u305f\u3060\u3057-1\u306e\u3068\u304d\u306f\u30d0\u30c3\u30af\u3068\u3059\u308b\u30020\u306f\u30cb\u30e5\u30fc\u30c8\u30e9\u30eb\u3001\u3060\u3063\u305f\u304b\u306a\uff1f)<\/li>\n\n\n\n<li>\u30de\u30eb\u30c1\u30d5\u30a1\u30f3\u30af\u30b7\u30e7\u30f3\u30e6\u30cb\u30c3\u30c8\u306b\u3088\u308b\u30e9\u30a4\u30c8\u3084\u30a6\u30a3\u30f3\u30ab\u30fc\u3001\u30db\u30fc\u30f3\u306a\u3069\u306e\u30a2\u30af\u30b7\u30e7\u30f3\u3082\u3001\u305d\u308c\u306b\u5fdc\u3058\u305f\u30b5\u30fc\u30dc\u4fe1\u53f7\u3092\u7591\u4f3c\u7684\u306b\u51fa\u529b\u3057\u3066\u518d\u73fe\u3002<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ https:\/\/qiita.com\/tajima_taso\/items\/fdfed88c1e735ffb41e8\n\n#include &lt;stdio.h&gt; \/\/printf(), fprintf(), perror(), getc()\n#include &lt;stdlib.h&gt; \/\/strtod()\n#include &lt;sys\/socket.h&gt; \/\/socket(), bind(), sendto(), recvfrom()\n#include &lt;arpa\/inet.h&gt; \/\/ struct sockaddr_in, struct sockaddr, inet_ntoa(), inet_aton()\n#include &lt;stdlib.h&gt; \/\/atoi(), exit(), EXIT_FAILURE, EXIT_SUCCESS\n#include &lt;string.h&gt; \/\/memset(), strcmp()\n#include &lt;unistd.h&gt; \/\/close()\n\n#include &lt;time.h&gt;   \/\/strftime(), localtime(), time()\n#include &lt;ctype.h&gt;  \/\/isspace()\n\n#include \"udp.h\"\n\n#include &lt;pigpio.h&gt;\n\n\/\/ \u30b5\u30fc\u30dc\u306e\u30d4\u30f3\u756a\u53f7(BCM\u756a\u53f7)\n#define PIN_SERVO_1_STEER 6\n#define PIN_SERVO_2_ACCEL 13\n#define PIN_SERVO_3_LIGHT 19\n#define PIN_SERVO_4_SHIFT 26\n\n\/\/ http:\/\/edu.clipper.co.jp\/pg-2-39.html\nvoid trim( char *s ) {\n    int i, j;\n \n    \/\/\u6587\u5b57\u5217\u306e\u6700\u5f8c\u304b\u3089\u7a7a\u767d\u3092\u8aad\u307f\u98db\u3070\u3057\u3066\u9664\u5916\u3059\u308b\n    for( i = strlen(s)-1; i &gt;= 0 &amp;&amp; isspace( s&#91;i] ); i-- ) ;\n    s&#91;i+1] = '\\0';\n    \/\/\u5148\u982d\u304b\u3089\u7a7a\u767d\u3067\u306a\u3044\u6587\u5b57\u307e\u3067\u8aad\u307f\u98db\u3070\u3059\n    for( i = 0; isspace( s&#91;i] ); i++ ) ;\n    \/\/\u524d\u65b9\u306e\u7a7a\u767d\u3092\u8a70\u3081\u308b\n    if( i &gt; 0 ) {\n        j = 0;\n        while( s&#91;i] ) s&#91;j++] = s&#91;i++];\n        s&#91;j] = '\\0';\n    }\n}\n\nvoid shift_change(int shift) {\n    if (shift == 0)\n        gpioServo(PIN_SERVO_4_SHIFT, 1500 + 400);\n    else\n        gpioServo(PIN_SERVO_4_SHIFT, 1500 + 400 - 400*(shift-1));\n}\n\nint main(int argc, char* argv&#91;]) {\n\n    const char *address = \"\";\n    unsigned short port = (unsigned short)atoi(argv&#91;1]);\n    struct sockaddr servSockAddr, clitSockAddr;\n    char recvBuffer&#91;MAX_BUFSIZE];\n\n    \/\/ UDP\u30bd\u30b1\u30c3\u30c8\u521d\u671f\u5316\n    int server_sock = get_socket(\"udp\");\n    sockaddr_init(address, port, &amp;servSockAddr);\n\n    if (bind(server_sock, &amp;servSockAddr, sizeof(servSockAddr)) &lt; 0) {\n        perror(\"bind() failed.\");\n        exit(EXIT_FAILURE);\n    }\n\n    \/\/ pigpio\u521d\u671f\u5316\n    if (gpioInitialise() &lt; 0) {\n        printf(\"\\nGPIO cannot initialised\\n\");\n        return 1;\n    }\n    gpioSetMode(PIN_SERVO_1_STEER, PI_OUTPUT);\n    gpioSetMode(PIN_SERVO_2_ACCEL, PI_OUTPUT);\n    gpioSetMode(PIN_SERVO_3_LIGHT, PI_OUTPUT);\n    gpioSetMode(PIN_SERVO_4_SHIFT, PI_OUTPUT);\n\n    gpioServo(PIN_SERVO_1_STEER, 1500);\n    gpioServo(PIN_SERVO_2_ACCEL, 1500);\n    gpioServo(PIN_SERVO_3_LIGHT, 1500);\n    gpioServo(PIN_SERVO_4_SHIFT, 1500 + 400);\n\n    \/\/ \u30e1\u30a4\u30f3\u30eb\u30fc\u30d7\n    int shift = 1; \/\/ \u30b7\u30d5\u30c8(1, 2, 3, 0(\u30d0\u30c3\u30af))\n    int brake = 0; \/\/ \u30d6\u30ec\u30fc\u30ad\u4e2d=1\n    int back  = 0; \/\/ \u30d0\u30c3\u30af\u4e2d=1\n    while(1) {\n        char date&#91;64];\n        int recvMsgSize = udp_receive(server_sock, recvBuffer, MAX_BUFSIZE, &amp;clitSockAddr);\n        if (recvMsgSize == MSG_FAILURE) continue;\n\n        \/\/ \u30d0\u30c3\u30d5\u30a1\u306e\u672b\u5c3e\u306b\\0\u8ffd\u52a0\n        recvBuffer&#91;recvMsgSize] = '\\0';\n        \/\/ \u30d0\u30c3\u30d5\u30a1\u306e\u524d\u5f8c\u306e\u7a7a\u767d\u30fb\u6539\u884c\u3092\u9664\u53bb(trim\u30e2\u30c9\u30ad)\n        trim(recvBuffer);\n\n        \/\/ \u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u3092\u6587\u5b57\u5217\u5316\n        \/\/ https:\/\/www.mm2d.net\/main\/prog\/c\/time-01.html\n        time_t t = time(NULL);\n        strftime(date, sizeof(date), \"%Y\/%m\/%d %H:%M:%S\", localtime(&amp;t));\n\n        \/\/ \u30c7\u30d0\u30c3\u30b0\u51fa\u529b\n        printf(\"&#91;%s] &lt;%s&gt; \", date,\n            inet_ntoa(((struct sockaddr_in *)&amp;clitSockAddr)-&gt;sin_addr));\n\n        int sendMsgSize = udp_send(server_sock, \"OK\\n\", &amp;clitSockAddr);\n        if (sendMsgSize == MSG_FAILURE) continue;\n\n        \/\/ \u53d7\u3051\u53d6\u3063\u305f\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u30d1\u30fc\u30b9\n        char key&#91;MAX_BUFSIZE];\n        char val&#91;MAX_BUFSIZE];\n        \/\/parse_param(recvBuffer, key, val);\n\n        \/*** key\u306e\u5185\u5bb9\u306b\u5fdc\u3058\u3066\u51e6\u7406 ***\/\n\n        \/\/ \u30b9\u30c6\u30a2\u30ea\u30f3\u30b0\n        if (strncmp(recvBuffer, \"STEERING=\", 9) == 0) {\n            \/\/ \u6d6e\u52d5\u5c0f\u6570\u70b9(-1.0\uff5e+1.0)\u3092\u8aad\u307f\u53d6\u308b\n            double value = strtod(&amp;recvBuffer&#91;9], NULL);\n            printf(\"STEERING    %f\\n\", value);\n            gpioServo(PIN_SERVO_1_STEER, 1500 - 400 * value);\n        }\n        \/\/ \u30a2\u30af\u30bb\u30eb\n        else if (strncmp(recvBuffer, \"ACCEL=\", 6) == 0) {\n            \/\/ \u6d6e\u52d5\u5c0f\u6570\u70b9(0.0\uff5e+1.0)\u3092\u8aad\u307f\u53d6\u308b\n            double value = strtod(&amp;recvBuffer&#91;6], NULL);\n\n            \/\/ 0.1\u4ee5\u4e0b\u306f\u30b9\u30ad\u30c3\u30d7\n            if (value &lt; 0.1 &amp;&amp; value != 0.0) {\n                printf(\"\\n\");\n                continue;\n            }\n\n            printf(\"ACCEL    %f\\n\", value);\n\n            \/\/ \u30d0\u30c3\u30af\u306e\u5834\u5408\n            if (shift == 0) {\n                \/\/ \u7b26\u53f7\u3092\u53cd\u8ee2\n                value = -value;\n\n                \/\/ \u30d0\u30c3\u30af\u3092\u96e2\u3057\u305f\u77ac\u9593\n                if (value == 0.0) back = 0;\n                \/\/ \u30d0\u30c3\u30af\u306e\u8e0f\u307f\u59cb\u3081\u306f\u4e00\u77ac\u30d0\u30c3\u30af\u3092\u5165\u308c\u308b\n                else if (back == 0) {\n                    back = 1;\n                    gpioServo(PIN_SERVO_2_ACCEL, 1500 + 100);\n                    gpioSleep(PI_TIME_RELATIVE, 0, 200000);\n                    gpioServo(PIN_SERVO_2_ACCEL, 1500);\n                    gpioSleep(PI_TIME_RELATIVE, 0, 10000);\n                    printf(\"BACK    START!!\\n\");\n                }\n            }\n\n            gpioServo(PIN_SERVO_2_ACCEL, 1500 - 400 * value);\n        }\n        \/\/ \u30d6\u30ec\u30fc\u30ad\n        else if (strncmp(recvBuffer, \"BRAKE=\", 6) == 0) {\n            \/\/ \u6d6e\u52d5\u5c0f\u6570\u70b9(0.0\uff5e+1.0)\u3092\u8aad\u307f\u53d6\u308b\n            double value = strtod(&amp;recvBuffer&#91;6], NULL);\n\n            \/\/ 0.1\u4ee5\u4e0b\u306f\u30b9\u30ad\u30c3\u30d7\n            if (value &lt; 0.1 &amp;&amp; value != 0.0) {\n                printf(\"\\n\");\n                continue;\n            }\n\n            printf(\"BRAKE    %f\\n\", value);\n\n            \/\/ \u30d6\u30ec\u30fc\u30ad\u3092\u96e2\u3057\u305f\u77ac\u9593\n            if (value == 0.0) brake = 0;\n            \/\/ \u30d6\u30ec\u30fc\u30ad\u306e\u8e0f\u307f\u59cb\u3081\u306f\u4e00\u77ac\u524d\u9032\u3092\u5165\u308c\u308b\n            else if (brake == 0) {\n                brake = 1;\n                gpioServo(PIN_SERVO_2_ACCEL, 1500 - 50);\n                gpioSleep(PI_TIME_RELATIVE, 0, 20000);\n                gpioServo(PIN_SERVO_2_ACCEL, 1500);\n                gpioSleep(PI_TIME_RELATIVE, 0, 10000);\n                printf(\"BRAKE    START!!\\n\");\n            }\n            gpioServo(PIN_SERVO_2_ACCEL, 1500 + 400 * value);\n        }\n\n        \/\/ \u30db\u30fc\u30f3\n        else if (strcmp(recvBuffer, \"HORN=ON\") == 0) {\n            gpioServo(PIN_SERVO_3_LIGHT, 1500 - 400);\n            printf(\"HORN    ON!!\\n\");\n        }\n        else if (strcmp(recvBuffer, \"HORN=OFF\") == 0) {\n            gpioServo(PIN_SERVO_3_LIGHT, 1500);\n            printf(\"HORN    OFF!\\n\");\n        }\n        \/\/ \u30cf\u30a4\u30d3\u30fc\u30e0(\u30d0\u30f3\u30d1\u30fc\u524d\u306e\u30d5\u30a9\u30b0)\n        else if (strcmp(recvBuffer, \"HIGHBEAM=ON\") == 0) {\n            gpioServo(PIN_SERVO_3_LIGHT, 1500 - 300);\n            printf(\"HIGHBEAM    ON!!\\n\");\n        }\n        else if (strcmp(recvBuffer, \"HIGHBEAM=OFF\") == 0) {\n            gpioServo(PIN_SERVO_3_LIGHT, 1500);\n            printf(\"HIGHBEAM    OFF!\\n\");\n        }\n        \/\/ \u30af\u30e9\u30c3\u30c1\n\n        \/\/ \u30b7\u30d5\u30c8\n        else if (strcmp(recvBuffer, \"SHIFT=UP\") == 0) {\n            shift++;\n            if (shift &gt; 3) shift = 3;\n            shift_change(shift);\n            printf(\"SHIFT   UP!!i   &#91;%d]\\n\", shift);\n        }\n        else if (strcmp(recvBuffer, \"SHIFT=DOWN\") == 0) {\n            shift--;\n            if (shift &lt; 0) shift = 0;\n            shift_change(shift);\n            printf(\"SHIFT   DOWN!!   &#91;%d]\\n\", shift);\n        }\n        \/\/ \u30a6\u30a3\u30f3\u30ab\u30fc(R2,L2)\n        else if (strcmp(recvBuffer, \"WINKER=RIGHT\") == 0) {\n            gpioServo(PIN_SERVO_1_STEER, 1500);\n            gpioServo(PIN_SERVO_3_LIGHT, 1500 + 400);\n            gpioSleep(PI_TIME_RELATIVE, 0, 100000); \/\/ sleep for 0.1 seconds\n            gpioServo(PIN_SERVO_3_LIGHT, 1500);\n            gpioSleep(PI_TIME_RELATIVE, 0, 100000); \/\/ sleep for 0.1 seconds\n            gpioServo(PIN_SERVO_1_STEER, 1500 - 120);\n            printf(\"WINKER  RIGHT\\n\");\n        }\n        else if (strcmp(recvBuffer, \"WINKER=LEFT\") == 0) {\n            gpioServo(PIN_SERVO_1_STEER, 1500);\n            gpioServo(PIN_SERVO_3_LIGHT, 1500 + 400);\n            gpioSleep(PI_TIME_RELATIVE, 0, 100000); \/\/ sleep for 0.1 seconds\n            gpioServo(PIN_SERVO_3_LIGHT, 1500);\n            gpioSleep(PI_TIME_RELATIVE, 0, 100000); \/\/ sleep for 0.1 seconds\n            gpioServo(PIN_SERVO_1_STEER, 1500 + 150);\n            printf(\"WINKER  LEFT\\n\");\n        }\n        else if (strcmp(recvBuffer, \"WINKER=OFF\") == 0) {\n            gpioServo(PIN_SERVO_1_STEER, 1500);\n            printf(\"WINKER  OFF\\n\");\n        }\n\n        \/\/ \u30e9\u30a4\u30c8\u70b9\u706f(\u25a1)\n        else if (strcmp(recvBuffer, \"LIGHT=UP\") == 0) {\n            gpioServo(PIN_SERVO_1_STEER, 1500);\n            gpioServo(PIN_SERVO_3_LIGHT, 1500 + 50 + 400);\n            gpioSleep(PI_TIME_RELATIVE, 0, 100000); \/\/ sleep for 0.1 seconds\n            gpioServo(PIN_SERVO_3_LIGHT, 1500 + 50);\n            gpioSleep(PI_TIME_RELATIVE, 0, 100000); \/\/ sleep for 0.1 seconds\n            printf(\"LIGHT   UP!\\n\");\n        }\n        \/\/ \u30cf\u30b6\u30fc\u30c9(\u25b3)\n        else if (strcmp(recvBuffer, \"HAZARD=ON\") == 0) {\n            gpioServo(PIN_SERVO_4_SHIFT, 1500 - 50);\n            gpioSleep(PI_TIME_RELATIVE, 0, 500000); \/\/ sleep for 0.1 seconds\n            gpioServo(PIN_SERVO_4_SHIFT, 1500 - 50 - 400);\n            gpioSleep(PI_TIME_RELATIVE, 0, 500000); \/\/ sleep for 0.1 seconds\n            gpioServo(PIN_SERVO_4_SHIFT, 1500 - 50);\n            gpioSleep(PI_TIME_RELATIVE, 0, 500000); \/\/ sleep for 0.1 seconds\n\/\/            shift_change(shift);\n            printf(\"HAZARD   ON!\\n\");\n        }\n        \/\/ \u30a8\u30f3\u30b8\u30f3\u505c\u6b62\u30fb\u59cb\u52d5(PS\u30dc\u30bf\u30f3)\n\n\n        \/\/ \u672a\u5bfe\u5fdc\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\n        else {\n            printf(\"not supported. '%s'\\n\", recvBuffer);\n        }\n    }\n\n    \/\/ \u7d42\u4e86\u51e6\u7406\n    gpioTerminate();\n    return 0;\n}\n\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u30cf\u30f3\u30b3\u30f3(\u30af\u30e9\u30a4\u30a2\u30f3\u30c8)\u5074\u306e\u30d7\u30ed\u30b0\u30e9\u30e0<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b9\u30c6\u30a2\u30ea\u30f3\u30b0\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u304b\u3089\u306e\u5024\u306e\u8aad\u307f\u53d6\u308a\u306f\u3053\u306e\u3042\u305f\u308a\u3092\u53c2\u8003\u306b\u3057\u305f(linux\/joystick.h\u3092\u5229\u7528)\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/wlog.flatlib.jp\/2014\/02\/25\/n1682\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/wlog.flatlib.jp\/2014\/02\/25\/n1682\/<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.kernel.org\/doc\/Documentation\/input\/joystick-api.txt\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.kernel.org\/doc\/Documentation\/input\/joystick-api.txt<\/a><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u30a2\u30af\u30bb\u30eb\u30da\u30c0\u30eb\u3001\u30d6\u30ec\u30fc\u30ad\u30da\u30c0\u30eb\u3001\u30b9\u30c6\u30a2\u30ea\u30f3\u30b0\u306a\u3069\u306e\u64cd\u4f5c\u304c\u3042\u3063\u305f\u3089\u3001\u305d\u306e\u30a2\u30ca\u30ed\u30b0\u5024\u3092\u53d6\u5f97\u3057\u3066UDP\u3067\u9001\u4fe1<\/li>\n\n\n\n<li>\u30b7\u30d5\u30c8\u30c1\u30a7\u30f3\u30b8\u30dc\u30bf\u30f3\u3001\u30a6\u30a3\u30f3\u30ab\u30fc(R2, L2)\u3001\u30db\u30fc\u30f3(GT\u30dc\u30bf\u30f3)\u3001\u30e9\u30a4\u30c8\u70b9\u706f(\u25a1)\u3001\u30cf\u30a4\u30d3\u30fc\u30e0(\u25cb)\u3001\u30cf\u30b6\u30fc\u30c9(\u25b3)\u3001\u30a8\u30f3\u30b8\u30f3\u59cb\u52d5\u30fb\u505c\u6b62(PS\u30dc\u30bf\u30f3)\u306a\u3069\u306e\u30dc\u30bf\u30f3\u5165\u529b\u304c\u3042\u3063\u305f\u3089\u3001\u305d\u308c\u3092UDP\u3067\u9001\u4fe1<\/li>\n\n\n\n<li>UDP\u306e\u9001\u4fe1\u306f\u30e9\u30b8\u30b3\u30f3\u5074\u3068\u540c\u69d8\u306e\u30da\u30fc\u30b8\u3092\u30de\u30cd\u3063\u3053<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u30b9\u30c6\u30a2\u30ea\u30f3\u30b0\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u304b\u3089\u306e\u5024\u306e\u8aad\u307f\u53d6\u308a\u30b5\u30f3\u30d7\u30eb\n\/\/ https:\/\/wlog.flatlib.jp\/item\/1682\n\/\/ https:\/\/www.kernel.org\/doc\/Documentation\/input\/joystick-api.txt\n\n#include &lt;stdio.h&gt;\n#include &lt;stdlib.h&gt;\n#include &lt;fcntl.h&gt;\n#include &lt;unistd.h&gt;\n#include &lt;linux\/joystick.h&gt;\n\n#include &lt;string.h&gt;\n#include &lt;signal.h&gt;\n#include &lt;errno.h&gt;\n\n#include \"udp.h\"\n\nint main(int argc, char* argv&#91;]) {\n    if (argc != 3) {\n        fprintf(stderr, \"argument count mismatch error.\\n\");\n        exit(EXIT_FAILURE);\n    }\n\n    \/*** UDP Socket\u306e\u521d\u671f\u5316(\u3053\u3053\u304b\u3089) ***\/\n    const char *address = argv&#91;1];\n    unsigned short port = (unsigned short)atoi(argv&#91;2]);\n    struct sockaddr servSockAddr, clitSockAddr;\n    struct sigaction action;\n\n    int server_sock = get_socket(\"udp\");\n    sockaddr_init(address, port, &amp;servSockAddr);\n\n    sigaction_init(&amp;action, catchAlarm);\n    if (sigaction(SIGALRM, &amp;action, NULL) &lt; 0) {\n        perror(\"sigaction() failure\");\n        exit(EXIT_FAILURE);\n    }\n    \/*** UDP Socket\u306e\u521d\u671f\u5316(\u3053\u3053\u307e\u3067) ***\/\n\n    \/\/ \u30b9\u30c6\u30a2\u30ea\u30f3\u30b0\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u30c7\u30d0\u30a4\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f\n    int fd = open(\"\/dev\/input\/js0\", O_RDONLY);\n    if (fd == -1) {\n        printf(\"Can't open \/dev\/input\/js0\\n\");\n        exit(0);\n    }\n\n    int flag_hazard = 0; \/\/ 1(ON), 0(OFF)\n    int flag_shift  = 0; \/\/ 3, 2, 1, 0(N), -1(R)\n    int flag_winker = 0; \/\/ 1(R), 0(OFF), -1(L)\n\/\/    char flag_light  = 0; \/\/ 1, 2, 3, 4\n    int flag_engine = 1; \/\/ 1(ON), 0(OFF)\n    while (1) {\n        struct js_event event;\n        char sendBuffer&#91;MAX_BUFSIZE];\n        char receiveBuffer&#91;MAX_BUFSIZE];\n\n        double value = 0.0;\n\n        \/\/ \u30b9\u30c6\u30a2\u30ea\u30f3\u30b0\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u304b\u3089\u8aad\u307f\u53d6\u308b\n        if (read(fd, &amp;event, sizeof(event))\n                 &lt; sizeof(event)) {\n            continue;\n        }\n\n        switch (event.type &amp; 0x7f) {\n        case JS_EVENT_BUTTON:\n            printf(\"BUTTON: number=%d, value=%d \",\n                event.number, event.value);\n\n            \/\/ \u30db\u30fc\u30f3(GT\u30dc\u30bf\u30f3)\n            if (event.number == 19) {\n                if (event.value == 1) {\n                    udp_send(server_sock, \"HORN=ON\", &amp;servSockAddr);\n                    printf(\"HORN=ON\");\n                }\n                else {\n                    udp_send(server_sock, \"HORN=OFF\", &amp;servSockAddr);\n                    printf(\"HORN=OFF\");\n                }\n            }\n            \/\/ \u30cf\u30a4\u30d3\u30fc\u30e0(\u25cb\u30dc\u30bf\u30f3)\n            else if (event.number == 2) {\n                if (event.value == 1) {\n                    udp_send(server_sock, \"HIGHBEAM=ON\", &amp;servSockAddr);\n                    printf(\"HIGHBEAM=ON\");\n                }\n                else {\n                    udp_send(server_sock, \"HIGHBEAM=OFF\", &amp;servSockAddr);\n                    printf(\"HIGHBEAM=OFF\");\n                }\n            }\n            \/\/ \u30af\u30e9\u30c3\u30c1\n            \/\/ \u30b7\u30d5\u30c8\u30c1\u30a7\u30f3\u30b8(\u30d1\u30c9\u30eb\u307e\u305f\u306f\u30ec\u30d0\u30fc)\n            else if ((event.number == 4 || event.number == 12 )\n                    &amp;&amp; event.value == 1) {\n                udp_send(server_sock, \"SHIFT=UP\", &amp;servSockAddr);\n                printf(\"SHIFT=UP\");\n            }\n            else if ((event.number == 5 || event.number == 13 )\n                    &amp;&amp; event.value == 1) {\n                udp_send(server_sock, \"SHIFT=DOWN\", &amp;servSockAddr);\n                printf(\"SHIFT=DOWN\");\n            }\n            \/\/ \u30a6\u30a3\u30f3\u30ab\u30fc(R2,L2) \u203b\u6539\u5584\u306e\u4f59\u5730\u3042\u308a\n            \/\/ \u30a6\u30a3\u30f3\u30ab\u30fc\u76f4\u5f8c\u306f\u30b9\u30c6\u30a2\u30ea\u30f3\u30b0\u3092\u30ad\u30e3\u30f3\u30bb\u30eb\u3057\u305f\u3044\u2026\n            else if (event.number == 6 &amp;&amp; event.value == 1) {\n                flag_hazard = 0;\n                udp_send(server_sock, \"WINKER=RIGHT\", &amp;servSockAddr);\n                printf(\"WINKER=RIGHT\");\n            }\n            else if (event.number == 7 &amp;&amp; event.value == 1) {\n                flag_hazard = 0;\n                udp_send(server_sock, \"WINKER=LEFT\", &amp;servSockAddr);\n                printf(\"WINKER=LEFT\");\n            }\n            \/\/ \u30e9\u30a4\u30c8\u70b9\u706f(\u25a1)\n            else if (event.number == 1 &amp;&amp; event.value == 1) {\n                udp_send(server_sock, \"LIGHT=UP\", &amp;servSockAddr);\n                printf(\"LIGHT=UP\");\n            }\n            \/\/ \u30cf\u30b6\u30fc\u30c9(\u25b3)\n            else if (event.number == 3 &amp;&amp; event.value == 1) {\n                flag_hazard ^= 1;\n                if (flag_hazard) {\n                    udp_send(server_sock, \"HAZARD=ON\", &amp;servSockAddr);\n                    printf(\"HAZARD=ON\");\n                }\n                else {\n                    udp_send(server_sock, \"HAZARD=OFF\", &amp;servSockAddr);\n                    printf(\"HAZARD=OFF\");\n                }\n            }\n            \/\/ \u30a8\u30f3\u30b8\u30f3\u505c\u6b62\u30fb\u59cb\u52d5(PS\u30dc\u30bf\u30f3)\n            else if (event.number == 20 &amp;&amp; event.value == 1) {\n                flag_engine ^= 1;\n                if (flag_engine) {\n                    udp_send(server_sock, \"ENGINE=START\", &amp;servSockAddr);\n                    printf(\"ENGINE=START\");\n                }\n                else {\n                    udp_send(server_sock, \"ENGINE=STOP\", &amp;servSockAddr);\n                    printf(\"ENGINE=STOP\");\n                }\n            }\n\n            printf(\"\\n\");\n            break;\n\n        case JS_EVENT_AXIS:\n            printf(\"AXIS: number=%d, value=%d   \",\n                event.number, event.value);\n            \/\/ \u30b9\u30c6\u30a2\u30ea\u30f3\u30b0\n            if (event.number == 0) {\n                value = event.value \/ 32767.0;\n                sprintf(sendBuffer, \"STEERING=%f\", value);\n                udp_send(server_sock, sendBuffer, &amp;servSockAddr);\n                printf(sendBuffer);\n            }\n            \/\/ \u30a2\u30af\u30bb\u30eb(\u3068\u308a\u3042\u3048\u305a\u524d\u9032\u3060\u3051)\n            else if (event.number == 1) {\n                value = (32767.0 - event.value) \/ (32767*2);\n                sprintf(sendBuffer, \"ACCEL=%f\", value);\n                udp_send(server_sock, sendBuffer, &amp;servSockAddr);\n                printf(sendBuffer);\n            }\n            \/\/ \u30d6\u30ec\u30fc\u30ad\n            else if (event.number == 2) {\n                value = (32767.0 - event.value) \/ (32767*2);\n                sprintf(sendBuffer, \"BRAKE=%f\", value);\n                udp_send(server_sock, sendBuffer, &amp;servSockAddr);\n                printf(sendBuffer);\n            }\n            printf(\"\\n\");\n            break;\n\n        default:\n            printf(\"OTHER\\n\");\n            break;\n        }\n    }\n\n    \/\/ \u7d42\u4e86\u51e6\u7406\n    close(fd);\n    return 0;\n}\n\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u30d7\u30ed\u30b0\u30e9\u30e0\u4e00\u5f0f<\/h2>\n\n\n\n<p><a href=\"https:\/\/www.tapoblog.0t0.jp\/wp-content\/uploads\/SocketRC_20181031.tar.gz\">https:\/\/www.tapoblog.0t0.jp\/wp-content\/uploads\/SocketRC_20181031.tar.gz<\/a><\/p>\n\n\n\n<p>\u4e00\u5fdcMakefile\u3084readme.txt\u3082\u5165\u308c\u3066\u3042\u308b\u306e\u3067\u3001\u30b3\u30f3\u30d1\u30a4\u30eb\u3084\u5b9f\u884c\u306f\u3067\u304d\u308b\u3068\u601d\u3046\u3002\u666e\u901a\u306e2ch\u30e9\u30b8\u30b3\u30f3\u3067\u3082\u3001\u30a2\u30af\u30bb\u30eb\u30fb\u30d6\u30ec\u30fc\u30ad\u30fb\u30b9\u30c6\u30a2\u30ea\u30f3\u30b0\u306f\u52d5\u304f\u3068\u601d\u3046\u3002<\/p>\n\n\n\n<p>\u30c0\u30b5\u3044\u30d7\u30ed\u30b0\u30e9\u30e0\u3067\u3061\u3087\u3063\u3068\u6065\u305a\u304b\u3057\u3044\u3051\u3069\u3001\u3053\u3093\u306a\u611f\u3058\u3067\u53c2\u8003\u306b\u306a\u3063\u305f\u304b\u306a\u3042\uff1f<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u65b0\u5e74\u65e9\u3005\u5730\u9707\u3084\u3089\u98db\u884c\u6a5f\u4e8b\u6545\u3084\u3089\u30e4\u30d9\u30fc\u6620\u50cf\u304c\u98db\u3073\u8fbc\u3093\u3067\u304f\u308b\u3051\u3069\u3001\u6211\u304c\u5bb6\u306f\u5e73\u5e38\u904b\u8ee2\u3002\u4eca\u5e74\u3082\u3088\u308d\u3057\u304f\u3002 \u4ee5\u524d\u306b\u3082\u66f8\u3044\u305f\u6c17\u304c\u3059\u308b\u3051\u3069\u3001\u306a\u305c\u304b\u4ffa\u306eYouTube\u30c1\u30e3\u30f3\u30cd\u30eb\u3067\u518d\u751f\u56de\u6570\u6700\u5927\u306a\u306e\u306f\u3001\u4f1a\u793e\u306e\u91d1\u3067\u904a\u3093\u3060\u304a\u52c9\u5f37\u3057\u305f\u30cf\u30f3\u30b3\u30f3\u30e9\u30b8 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[3,8],"tags":[91],"class_list":{"0":"post-7875","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-3","7":"category-8","8":"tag-91"},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tapoblog.0t0.jp\/index.php?rest_route=\/wp\/v2\/posts\/7875","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tapoblog.0t0.jp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tapoblog.0t0.jp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tapoblog.0t0.jp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tapoblog.0t0.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7875"}],"version-history":[{"count":0,"href":"https:\/\/www.tapoblog.0t0.jp\/index.php?rest_route=\/wp\/v2\/posts\/7875\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.tapoblog.0t0.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7875"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tapoblog.0t0.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7875"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tapoblog.0t0.jp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7875"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}