superpeter
Posts: 3
Joined: Sat Jun 30, 2018 5:33 am

gcc script en php / i2c en php

Sat Jun 30, 2018 5:55 am

hallo allemaal

ik heb voor een project men raspbery pi 3 verbonden met men arduino en die communiceren middels i2c met elkaar.
hiervoor gebruik ik het volgende gcc (c) script

Code: Select all

#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <linux/i2c-dev.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <unistd.h>
 
// The PiWeather board i2c address
#define ADDRESS 0x04
 
// The I2C bus: This is for V2 pi's. For V1 Model B you need i2c-0
static const char *devName = "/dev/i2c-1";
 
int main(int argc, char** argv) {
 
  if (argc == 1) {
    printf("Supply one or more commands to send to the Arduino\n");
    exit(1);
  }
 
  printf("I2C: Connecting\n");
  int file;
 
  if ((file = open(devName, O_RDWR)) < 0) {
    fprintf(stderr, "I2C: Failed to access %d\n", devName);
    exit(1);
  }
 
  printf("I2C: acquiring buss to 0x%x\n", ADDRESS);
 
  if (ioctl(file, I2C_SLAVE, ADDRESS) < 0) {
    fprintf(stderr, "I2C: Failed to acquire bus access/talk to slave 0x%x\n", ADDRESS);
    exit(1);
  }
 
  int arg;
 
  for (arg = 1; arg < argc; arg++) {
    int val;
    unsigned char cmd[16];
 
    if (0 == sscanf(argv[arg], "%d", &val)) {
      fprintf(stderr, "Invalid parameter %d \"%s\"\n", arg, argv[arg]);
      exit(1);
    }
 
    printf("Sending %d\n", val);
 
    cmd[0] = val;
    if (write(file, cmd, 1) == 1) {
 
      // As we are not talking to direct hardware but a microcontroller we
      // need to wait a short while so that it can respond.
      //
      // 1ms seems to be enough but it depends on what workload it has
      usleep(10000);
 
      char buf[1];
      if (read(file, buf, 1) == 1) {
    int temp = (int) buf[0];

 
    printf("Received %d\n", temp);
      }
    }
 
    // Now wait else you could crash the arduino by sending requests too fast
    usleep(10000);
  }
 
  close(file);
  return (EXIT_SUCCESS);
}

en tot zo ver werkt het ook prima.
echter zijn er nu wel ook wat vragen en verbeter punten.
en daarbij heb ik hulp nodig want ben nog veren van een pro dus kan nog hele hoop bij leren.
daarom de dingen waar ik hulp bij nodig heb.

1: hoe zorg ik dat ik niet alleen numerieke getallen kan mee sturen om info van de arduino op te vragen.
nat nu krijg ik alleen response als ik bv: ./main 1 maar als ik ./main amp1 doe krijg ik te zien dat het een ongeldige waarde is.

2: hoe zorg ik dat ik in php de volgende info te zien krijg en php ./main gebruikt om info op te vragen.
even voor het gemak wat ik te zien krijg als ik op de raspbery pi ./main 1 doe en welke info ik in men webbrowser wil zien

Code: Select all

I2C: Connecting
I2C: acquiring buss to 0x4
Sending 1
Received 207
de info die ik binnen men php web pagina wil zien is alleen het getal 207
let wel die 207 is niet altijd 207 dit kan dus ook een ander getal zijn.

is er iemand die me kan zeggen of en zo ja hoe ik dit voor elkaar kan krijgen?
groeten: peter

Return to “Nederlands”

Who is online

Users browsing this forum: Brandon92 and 2 guests