Raspberry Pi와 Blynk에서 방의 온도를 스마트 폰으로 확인
19432 단어 RaspberryPiBlynkIoTI2C
개요
매회마다 개요라든지 쓰고 있지만 의미가 없는 것 뿐이고, 이번은 Phpstorm 사버렸을 정도밖에 생각하지 못했습니다만・・・.
모처럼 Raspberry Pi가 있기 때문에, IoT답게 유행의 Blynk 에서 놀았습니다.
즉시 소개 -> L 치카
라고 하는 것을 쓰려고 했습니다만, 스마트폰의 스쿠쇼 찍거나 힘들기 때문에, L치카는 Qiita로 공개 끝난 좋은 기사가 있었으므로 그쪽을 참고로 하는 편이 좋다고 생각합니다・・・.
Qiita : [* Raspberry Pi *] Blynk를 사용하여 스마트 폰에서 LED 치카치카)
그래서 여기에서는 Raspberry Pi와 I2C에서 기온을 그래프 등으로 표시하고 싶습니다.
I2C에서 기온을 얻고 Blynk로 표시
라고 써 두면서 우선은 Label에 텍스트 표시해 보았습니다.
구그하면 아무도 이것도 마이크로 컴퓨터를 사용하거나 Raspberry Pi의 방법을 모르기 때문에, 어쩔 수 없이 Blank의 레퍼런스 보았어요・・・.
Blynk Docs
위의 L치카를 한 사람은 이런 식으로 Raspberry Pi에서 Blynk Server가 일어나고 있다고 생각합니다.
이제 스마트폰의 버튼을 누르면 L이 치카치카했는지 생각합니다.
다음은 스마트 폰의 위젯에 데이터를 전달합니다.
Virtual Pins
놀이로 스마트 폰 측에서 데이터를 요청한 날짜와 시간에도 표시해 보겠습니다.
Blynk Docs #Virtual Pins 에 의하면, Virtual Pin이라고 하는 것에 텍스트에서도 먹게 하면(자), 그대로에 보내지는 것 같습니다.
Blynk.virtualWrite(pin, "abc");
Blynk.virtualWrite(pin, 123);
Blynk.virtualWrite(pin, 12.34);
Blynk.virtualWrite(pin, "hello", 123, 12.34);
이것을 어디에 쓰는가 하면, Blynk의 git의 클론을 만든 장소에 있는 main.cpp 에 씁니다.
요점은 커스터마이즈 한다면, make 다시 해 주세요라고 하는 것.
main.cpp/**
* @file main.cpp
* @author Volodymyr Shymanskyy
* @license This project is released under the MIT License (MIT)
* @copyright Copyright (c) 2015 Volodymyr Shymanskyy
* @date Mar 2015
* @brief
*/
/* <--------------------------------------------------------------------- ここから */
#include <stdio.h>
#include <string.h>
#include <time.h>
/* <--------------------------------------------------------------------- ここまで(多分いらない・・・) */
//#define BLYNK_DEBUG
#define BLYNK_PRINT stdout
#ifdef RASPBERRY
#include <BlynkApiWiringPi.h>
#else
#include <BlynkApiLinux.h>
#endif
#include <BlynkSocket.h>
#include <BlynkOptionsParser.h>
static BlynkTransportSocket _blynkTransport;
BlynkSocket Blynk(_blynkTransport);
#include <BlynkWidgets.h>
BLYNK_READ(V0) /* <--------------------------------------------------------------------- ここから */
{
FILE *fp;
char str[256] = {0};
if ((fp = fopen("/tmp/blynktest.log", "a+")) == NULL) { /* 適当なところにログファイル作る感じ */
printf("file open error!!\n");
exit(EXIT_FAILURE);
}
/*
while (fgets(str, 256, fp) != NULL) {
printf("%s", str);
}
*/
time_t now;
now = time(NULL);
fprintf(fp, "%s", ctime(&now)); /* ログファイルのケツに今の日時を入れる */
fclose(fp);
BLYNK_LOG("%s", ctime(&now)); /* Blynk待受側にログを出力 */
Blynk.virtualWrite(V0, ctime(&now)); /* 仮想のピンV0に今の日時の文字列を代入 */
} /* <--------------------------------------------------------------------- ここまで */
BLYNK_WRITE(V1)
{
printf("Got a value: %s\n", param[0].asStr());
}
int main(int argc, char* argv[])
{
const char *auth, *serv;
uint16_t port;
parse_options(argc, argv, auth, serv, port);
Blynk.begin(auth, serv, port);
while(true) {
Blynk.run();
}
return 0;
}
이것을 make 해, ./blynk --token=***
스마트 폰은 Label을 만들고 Input을 virtual V0으로, Label을 /pin/
로 만듭니다.
그리고는 스마트 폰 측의 Blynk 우측 상단의 재생 버튼을 누르면, 스마트 폰 측 · Raspberry Pi의 Blynk 대기 측 ·/tmp/blynktest.log에 지금의 일시가 기입되어 갑니다.
막상 I2C에
더 이상 말하지 마세요!BLYNK_READ(V0){}
같이 여기에서 I2C 논리를 쓰는 경우에 움직입니다.
(위의 스마트 폰 측의 이미지에서도 그래프로 기온 내고있는 것 같은 곳이 있습니다만, 바로 그것이 I2C 사용한 사람입니다)
main.cpp/**
* @file main.cpp
* @author Volodymyr Shymanskyy
* @license This project is released under the MIT License (MIT)
* @copyright Copyright (c) 2015 Volodymyr Shymanskyy
* @date Mar 2015
* @brief
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <linux/i2c-dev.h> // I2C用インクルード
#include <fcntl.h>
#include <sys/ioctl.h>
//#define BLYNK_DEBUG
#define BLYNK_PRINT stdout
#ifdef RASPBERRY
#include <BlynkApiWiringPi.h>
#else
#include <BlynkApiLinux.h>
#endif
#include <BlynkSocket.h>
#include <BlynkOptionsParser.h>
static BlynkTransportSocket _blynkTransport;
BlynkSocket Blynk(_blynkTransport);
#include <BlynkWidgets.h>
float tempval();
BLYNK_READ(V0)
{
double num = 0.00;
char str[128]={0};
num = tempval();
sprintf(str, "%.2f", tempval());
Blynk.virtualWrite(V0, str);
}
int main(int argc, char* argv[])
{
const char *auth, *serv;
uint16_t port;
parse_options(argc, argv, auth, serv, port);
Blynk.begin(auth, serv, port);
while(true) {
Blynk.run();
}
return 0;
}
float tempval(){
char *i2cFileName = "/dev/i2c-1";
const unsigned char i2cAddress = 0x18;
const __u8 t_reg = 0x05;
int i2c_fd;
if((i2c_fd = open(i2cFileName,O_RDWR)) < 0){
fprintf(stderr,"Faild to open i2c port¥n");
return 1;
}
if (ioctl(i2c_fd, I2C_SLAVE,i2cAddress) < 0) {
fprintf(stderr,"Unable to get bus access to talk to slave¥n");
return 1;
}
__s32 res = i2c_smbus_read_word_data(i2c_fd,t_reg);
if(res < 0){
fprintf(stderr,"Error i2c_smbus_read_word_data()¥n");
return 1;
}
float temp;
{
__u16 t = res << 8 | res >> 8;//byte swap
temp = t & 0x0FFF; //mask
temp /= 16;
if(t & 0x1000){ //sign or unsigned
temp -= 256;
}
}
time_t t;
time(&t);
struct tm *m;
m = localtime(&t);
// printf("%d/%d/%d-%d:%d:%d,%.2f\n",m->tm_year+1900,m->tm_mon+1,m->tm_mday,m->tm_hour,m->tm_ min,m->tm_sec,temp);
// printf("%.2f", temp);
return temp;
}
조금 졸린다.
내일도 출근하지 않으면 안되기 때문에, 우선 이것으로 줍니다.
라고 할까, 스마트 폰 측의 Blynk는 직감 조작 여유이므로, 설명하지 않습니다!
그래프 만들어 보면 절대 알 수 있습니다!
대단해!
문제는 C언어가 너무 오래간다 응코・・・
Reference
이 문제에 관하여(Raspberry Pi와 Blynk에서 방의 온도를 스마트 폰으로 확인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/wakisuke/items/556239daa44e5ba5ee0a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
라고 하는 것을 쓰려고 했습니다만, 스마트폰의 스쿠쇼 찍거나 힘들기 때문에, L치카는 Qiita로 공개 끝난 좋은 기사가 있었으므로 그쪽을 참고로 하는 편이 좋다고 생각합니다・・・.
Qiita : [* Raspberry Pi *] Blynk를 사용하여 스마트 폰에서 LED 치카치카)
그래서 여기에서는 Raspberry Pi와 I2C에서 기온을 그래프 등으로 표시하고 싶습니다.
I2C에서 기온을 얻고 Blynk로 표시
라고 써 두면서 우선은 Label에 텍스트 표시해 보았습니다.
구그하면 아무도 이것도 마이크로 컴퓨터를 사용하거나 Raspberry Pi의 방법을 모르기 때문에, 어쩔 수 없이 Blank의 레퍼런스 보았어요・・・.
Blynk Docs
위의 L치카를 한 사람은 이런 식으로 Raspberry Pi에서 Blynk Server가 일어나고 있다고 생각합니다.
이제 스마트폰의 버튼을 누르면 L이 치카치카했는지 생각합니다.
다음은 스마트 폰의 위젯에 데이터를 전달합니다.
Virtual Pins
놀이로 스마트 폰 측에서 데이터를 요청한 날짜와 시간에도 표시해 보겠습니다.
Blynk Docs #Virtual Pins 에 의하면, Virtual Pin이라고 하는 것에 텍스트에서도 먹게 하면(자), 그대로에 보내지는 것 같습니다.
Blynk.virtualWrite(pin, "abc");
Blynk.virtualWrite(pin, 123);
Blynk.virtualWrite(pin, 12.34);
Blynk.virtualWrite(pin, "hello", 123, 12.34);
이것을 어디에 쓰는가 하면, Blynk의 git의 클론을 만든 장소에 있는 main.cpp 에 씁니다.
요점은 커스터마이즈 한다면, make 다시 해 주세요라고 하는 것.
main.cpp/**
* @file main.cpp
* @author Volodymyr Shymanskyy
* @license This project is released under the MIT License (MIT)
* @copyright Copyright (c) 2015 Volodymyr Shymanskyy
* @date Mar 2015
* @brief
*/
/* <--------------------------------------------------------------------- ここから */
#include <stdio.h>
#include <string.h>
#include <time.h>
/* <--------------------------------------------------------------------- ここまで(多分いらない・・・) */
//#define BLYNK_DEBUG
#define BLYNK_PRINT stdout
#ifdef RASPBERRY
#include <BlynkApiWiringPi.h>
#else
#include <BlynkApiLinux.h>
#endif
#include <BlynkSocket.h>
#include <BlynkOptionsParser.h>
static BlynkTransportSocket _blynkTransport;
BlynkSocket Blynk(_blynkTransport);
#include <BlynkWidgets.h>
BLYNK_READ(V0) /* <--------------------------------------------------------------------- ここから */
{
FILE *fp;
char str[256] = {0};
if ((fp = fopen("/tmp/blynktest.log", "a+")) == NULL) { /* 適当なところにログファイル作る感じ */
printf("file open error!!\n");
exit(EXIT_FAILURE);
}
/*
while (fgets(str, 256, fp) != NULL) {
printf("%s", str);
}
*/
time_t now;
now = time(NULL);
fprintf(fp, "%s", ctime(&now)); /* ログファイルのケツに今の日時を入れる */
fclose(fp);
BLYNK_LOG("%s", ctime(&now)); /* Blynk待受側にログを出力 */
Blynk.virtualWrite(V0, ctime(&now)); /* 仮想のピンV0に今の日時の文字列を代入 */
} /* <--------------------------------------------------------------------- ここまで */
BLYNK_WRITE(V1)
{
printf("Got a value: %s\n", param[0].asStr());
}
int main(int argc, char* argv[])
{
const char *auth, *serv;
uint16_t port;
parse_options(argc, argv, auth, serv, port);
Blynk.begin(auth, serv, port);
while(true) {
Blynk.run();
}
return 0;
}
이것을 make 해, ./blynk --token=***
스마트 폰은 Label을 만들고 Input을 virtual V0으로, Label을 /pin/
로 만듭니다.
그리고는 스마트 폰 측의 Blynk 우측 상단의 재생 버튼을 누르면, 스마트 폰 측 · Raspberry Pi의 Blynk 대기 측 ·/tmp/blynktest.log에 지금의 일시가 기입되어 갑니다.
막상 I2C에
더 이상 말하지 마세요!BLYNK_READ(V0){}
같이 여기에서 I2C 논리를 쓰는 경우에 움직입니다.
(위의 스마트 폰 측의 이미지에서도 그래프로 기온 내고있는 것 같은 곳이 있습니다만, 바로 그것이 I2C 사용한 사람입니다)
main.cpp/**
* @file main.cpp
* @author Volodymyr Shymanskyy
* @license This project is released under the MIT License (MIT)
* @copyright Copyright (c) 2015 Volodymyr Shymanskyy
* @date Mar 2015
* @brief
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <linux/i2c-dev.h> // I2C用インクルード
#include <fcntl.h>
#include <sys/ioctl.h>
//#define BLYNK_DEBUG
#define BLYNK_PRINT stdout
#ifdef RASPBERRY
#include <BlynkApiWiringPi.h>
#else
#include <BlynkApiLinux.h>
#endif
#include <BlynkSocket.h>
#include <BlynkOptionsParser.h>
static BlynkTransportSocket _blynkTransport;
BlynkSocket Blynk(_blynkTransport);
#include <BlynkWidgets.h>
float tempval();
BLYNK_READ(V0)
{
double num = 0.00;
char str[128]={0};
num = tempval();
sprintf(str, "%.2f", tempval());
Blynk.virtualWrite(V0, str);
}
int main(int argc, char* argv[])
{
const char *auth, *serv;
uint16_t port;
parse_options(argc, argv, auth, serv, port);
Blynk.begin(auth, serv, port);
while(true) {
Blynk.run();
}
return 0;
}
float tempval(){
char *i2cFileName = "/dev/i2c-1";
const unsigned char i2cAddress = 0x18;
const __u8 t_reg = 0x05;
int i2c_fd;
if((i2c_fd = open(i2cFileName,O_RDWR)) < 0){
fprintf(stderr,"Faild to open i2c port¥n");
return 1;
}
if (ioctl(i2c_fd, I2C_SLAVE,i2cAddress) < 0) {
fprintf(stderr,"Unable to get bus access to talk to slave¥n");
return 1;
}
__s32 res = i2c_smbus_read_word_data(i2c_fd,t_reg);
if(res < 0){
fprintf(stderr,"Error i2c_smbus_read_word_data()¥n");
return 1;
}
float temp;
{
__u16 t = res << 8 | res >> 8;//byte swap
temp = t & 0x0FFF; //mask
temp /= 16;
if(t & 0x1000){ //sign or unsigned
temp -= 256;
}
}
time_t t;
time(&t);
struct tm *m;
m = localtime(&t);
// printf("%d/%d/%d-%d:%d:%d,%.2f\n",m->tm_year+1900,m->tm_mon+1,m->tm_mday,m->tm_hour,m->tm_ min,m->tm_sec,temp);
// printf("%.2f", temp);
return temp;
}
조금 졸린다.
내일도 출근하지 않으면 안되기 때문에, 우선 이것으로 줍니다.
라고 할까, 스마트 폰 측의 Blynk는 직감 조작 여유이므로, 설명하지 않습니다!
그래프 만들어 보면 절대 알 수 있습니다!
대단해!
문제는 C언어가 너무 오래간다 응코・・・
Reference
이 문제에 관하여(Raspberry Pi와 Blynk에서 방의 온도를 스마트 폰으로 확인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/wakisuke/items/556239daa44e5ba5ee0a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Blynk.virtualWrite(pin, "abc");
Blynk.virtualWrite(pin, 123);
Blynk.virtualWrite(pin, 12.34);
Blynk.virtualWrite(pin, "hello", 123, 12.34);
/**
* @file main.cpp
* @author Volodymyr Shymanskyy
* @license This project is released under the MIT License (MIT)
* @copyright Copyright (c) 2015 Volodymyr Shymanskyy
* @date Mar 2015
* @brief
*/
/* <--------------------------------------------------------------------- ここから */
#include <stdio.h>
#include <string.h>
#include <time.h>
/* <--------------------------------------------------------------------- ここまで(多分いらない・・・) */
//#define BLYNK_DEBUG
#define BLYNK_PRINT stdout
#ifdef RASPBERRY
#include <BlynkApiWiringPi.h>
#else
#include <BlynkApiLinux.h>
#endif
#include <BlynkSocket.h>
#include <BlynkOptionsParser.h>
static BlynkTransportSocket _blynkTransport;
BlynkSocket Blynk(_blynkTransport);
#include <BlynkWidgets.h>
BLYNK_READ(V0) /* <--------------------------------------------------------------------- ここから */
{
FILE *fp;
char str[256] = {0};
if ((fp = fopen("/tmp/blynktest.log", "a+")) == NULL) { /* 適当なところにログファイル作る感じ */
printf("file open error!!\n");
exit(EXIT_FAILURE);
}
/*
while (fgets(str, 256, fp) != NULL) {
printf("%s", str);
}
*/
time_t now;
now = time(NULL);
fprintf(fp, "%s", ctime(&now)); /* ログファイルのケツに今の日時を入れる */
fclose(fp);
BLYNK_LOG("%s", ctime(&now)); /* Blynk待受側にログを出力 */
Blynk.virtualWrite(V0, ctime(&now)); /* 仮想のピンV0に今の日時の文字列を代入 */
} /* <--------------------------------------------------------------------- ここまで */
BLYNK_WRITE(V1)
{
printf("Got a value: %s\n", param[0].asStr());
}
int main(int argc, char* argv[])
{
const char *auth, *serv;
uint16_t port;
parse_options(argc, argv, auth, serv, port);
Blynk.begin(auth, serv, port);
while(true) {
Blynk.run();
}
return 0;
}
/**
* @file main.cpp
* @author Volodymyr Shymanskyy
* @license This project is released under the MIT License (MIT)
* @copyright Copyright (c) 2015 Volodymyr Shymanskyy
* @date Mar 2015
* @brief
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <linux/i2c-dev.h> // I2C用インクルード
#include <fcntl.h>
#include <sys/ioctl.h>
//#define BLYNK_DEBUG
#define BLYNK_PRINT stdout
#ifdef RASPBERRY
#include <BlynkApiWiringPi.h>
#else
#include <BlynkApiLinux.h>
#endif
#include <BlynkSocket.h>
#include <BlynkOptionsParser.h>
static BlynkTransportSocket _blynkTransport;
BlynkSocket Blynk(_blynkTransport);
#include <BlynkWidgets.h>
float tempval();
BLYNK_READ(V0)
{
double num = 0.00;
char str[128]={0};
num = tempval();
sprintf(str, "%.2f", tempval());
Blynk.virtualWrite(V0, str);
}
int main(int argc, char* argv[])
{
const char *auth, *serv;
uint16_t port;
parse_options(argc, argv, auth, serv, port);
Blynk.begin(auth, serv, port);
while(true) {
Blynk.run();
}
return 0;
}
float tempval(){
char *i2cFileName = "/dev/i2c-1";
const unsigned char i2cAddress = 0x18;
const __u8 t_reg = 0x05;
int i2c_fd;
if((i2c_fd = open(i2cFileName,O_RDWR)) < 0){
fprintf(stderr,"Faild to open i2c port¥n");
return 1;
}
if (ioctl(i2c_fd, I2C_SLAVE,i2cAddress) < 0) {
fprintf(stderr,"Unable to get bus access to talk to slave¥n");
return 1;
}
__s32 res = i2c_smbus_read_word_data(i2c_fd,t_reg);
if(res < 0){
fprintf(stderr,"Error i2c_smbus_read_word_data()¥n");
return 1;
}
float temp;
{
__u16 t = res << 8 | res >> 8;//byte swap
temp = t & 0x0FFF; //mask
temp /= 16;
if(t & 0x1000){ //sign or unsigned
temp -= 256;
}
}
time_t t;
time(&t);
struct tm *m;
m = localtime(&t);
// printf("%d/%d/%d-%d:%d:%d,%.2f\n",m->tm_year+1900,m->tm_mon+1,m->tm_mday,m->tm_hour,m->tm_ min,m->tm_sec,temp);
// printf("%.2f", temp);
return temp;
}
Reference
이 문제에 관하여(Raspberry Pi와 Blynk에서 방의 온도를 스마트 폰으로 확인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/wakisuke/items/556239daa44e5ba5ee0a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)