SpressenseからHTTPでKintoneにデータを送信したい
public.icon
⚠️この解決策はセキュリティ的によろしくはないので、ハッカソンなどの一時的なものへの対処法としておすすめします。
電子工作などはほぼ未経験なので満足な理解なしに書いている可能性もあります。
LTE通信も考えたが、今後の運用コストもかかってしまうので、できれば無料で運用できるWifiを利用したいと考えた。
Wifiの拡張ボードとして今回は以下を利用した
https://gyazo.com/0e2b91ec7d737f402a12ef006925d56a
SPRESENSE用Wi-Fi add-onボード
こちらはサンプルコードがGitHubに公開されている
こちらをそのまま動かすことでWIFIへの接続とGET通信を確認することが可能
つまづいたポイント
SPRESENSEでHTTPS通信を行うのがかなり沼
SDカードに証明書を入れればいけそうな記述もありつつも、結局のところ今僕には理解できなかった
HTTP通信はサンプルコードを使えば割と簡単にできた
KintoneはHTTPSでの追加しかできない
今回の解決策
さくらのクラウドにサーバーを作成し、Nginxでプロキシを作成した HTTPで公開されたエンドポイントにPOSTすると、kintoneへHTTPSでリクエストするように設定した
nginxの設定はcat /etc/nginx/nginx.confで確認することができる
以下に書き換えることで、HTTPで/にPOSTを投げた際に、そのままHTTPSでkintoneへ保存を行ってくれる。
以下のトークン1箇所と、APIのURLは2箇所変更する。追加するレコードのidとアプリidも適宜変更する
code:nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user $time_local "$request" ' '$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
server {
listen 80 default_server;
server_name _;
location /health {
access_log off;
return 200 'OK!';
add_header Content-Type text/plain;
}
location / {
proxy_set_header Host xxxxxxxxxxxxx.cybozu.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Cybozu-API-Token "実際のトークンを入力してください";
proxy_set_header Content-Type "application/json";
}
}
}
サクラクラウドに最小構成のCentoOSを構築
https://gyazo.com/5bbe30e56ea9ebffa20d6ca981c52532
https://gyazo.com/055d594f521ea5eae6bcbf6d1516edbf