Raspberry Pi, Windows IoT, C # - PullRequest
       56

Raspberry Pi, Windows IoT, C #

0 голосов
/ 08 ноября 2018

В настоящее время я экспериментирую с Raspberry Pi с датчиками Grove и Windows IoT. Я пытаюсь передать информацию из Raspberry Pi в Azure и получаю сообщение об ошибке (в строке 85).

Код выглядит так:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Http;
using Windows.ApplicationModel.Background;
using GrovePi;
using GrovePi.I2CDevices;
using GrovePi.Sensors;
using GrovePi.Common;
using System.Threading.Tasks;
using Microsoft.Azure.Devices.Client;
using Newtonsoft.Json;

// The Background Application template is documented at http://go.microsoft.com/fwlink/?LinkID=533884&clcid=0x409

namespace GrooveTHS
{
    public sealed class StartupTask : IBackgroundTask
    {
        IRgbLcdDisplay LCDDisplay;
        public void Run(IBackgroundTaskInstance taskInstance)
        {
            IDHTTemperatureAndHumiditySensor sensor = DeviceFactory.Build.DHTTemperatureAndHumiditySensor(Pin.DigitalPin7, DHTModel.Dht11); // pinD7
            LCDDisplay = DeviceFactory.Build.RgbLcdDisplay(); // pinI2C-1
            IRotaryAngleSensor potentiometer = DeviceFactory.Build.RotaryAngleSensor(Pin.AnalogPin2); // pinA2
            ILed red = DeviceFactory.Build.Led(Pin.DigitalPin5); // pinD5
            ILed green = DeviceFactory.Build.Led(Pin.DigitalPin6); // pinD6
            IUltrasonicRangerSensor dsensor = DeviceFactory.Build.UltraSonicSensor(Pin.DigitalPin4); // pin D4

            double angle = 0;
            double tmax = 0;

            while (true)
            {
                Task.Delay(500).Wait();
                angle = potentiometer.SensorValue();
                sensor.Measure();
                string sensortemp = sensor.TemperatureInCelsius.ToString();
                tmax = Math.Floor(angle / 10);
                string sensorvalue = dsensor.MeasureInCentimeters().ToString();
                if (sensor.TemperatureInCelsius > tmax)
                {
                    System.Diagnostics.Debug.WriteLine("Raumtemperatur: " + sensortemp + "C " + "Tmax: " + tmax.ToString() + "C");

                    red.AnalogWrite(Convert.ToByte(240));
                    green.AnalogWrite(Convert.ToByte(0));
                }
                else
                {
                    System.Diagnostics.Debug.WriteLine("Raumtemperatur: " + sensortemp + "C" + "Tmax: " + tmax.ToString() + "C");

                    red.AnalogWrite(Convert.ToByte(0));
                    green.AnalogWrite(Convert.ToByte(240));
                }
                if (dsensor.MeasureInCentimeters() < 150)
                {
                    LCDDisplay.SetBacklightRgb(BitConverter.GetBytes(990)[0], BitConverter.GetBytes(990)[0], BitConverter.GetBytes(990)[0]);
                    LCDDisplay.SetText("Raumtemperatur: " + sensortemp + "C " + "Tmax: " + tmax.ToString() + "C");
                }
                else
                {
                    LCDDisplay.SetText("");
                    LCDDisplay.SetBacklightRgb(BitConverter.GetBytes(0)[0], BitConverter.GetBytes(0)[0], BitConverter.GetBytes(0)[0]);
                }
            }
        }


        static async void SendDeviceToCloudMessagesAsync(long inputDistance)
        {
            string iotHubUri = "IotHubAuburn.azure-devices.net"; // ! put in value !
            string deviceId = "jb"; // ! put in value !
            string deviceKey = "sHGJlQbLLMeMExNaqtvh8/7N7MHWlBZ0ESj2ePahSwQ="; // ! put in value !
            DateTime time = DateTime.UtcNow;

            var deviceClient = DeviceClient.Create(iotHubUri, AuthenticationMethodFactory.CreateAuthenticationWithRegistrySymmetricKey(deviceId, deviceKey), TransportType.Http1);

            JSON jsonStr = new JSON();
            jsonStr.distance = inputDistance;
            jsonStr.time = time;
            jsonStr.deviceId = deviceId;
            var list = JsonConvert.SerializeObject(jsonStr);
            System.Diagnostics.Debug.WriteLine(list);
            var message = new Message(Encoding.UTF8.GetBytes(list));

            await deviceClient.SendEventAsync(message);
        }
    }
}

И ошибки, которые я получаю, следующие (Перевод с немецкого языка):

1) CS0246 Тип или имя пространства имен "JSON" не найдено (возможно, using-derective или сборка выговоров отсутствует).

2) CS0246 Тип или имя пространства имен "JSON" не найдено (возможно, using-derective или сборка выговоров отсутствует).

С уважением,

Alex

1 Ответ

0 голосов
/ 09 ноября 2018

Ошибка означает, что определение класса "JSON" не найдено. Как указал @Eric Magers, из источника кода, на который вы ссылаетесь, вы можете определить, где определен класс JSON.

Или вы также можете определить свой собственный класс "JSON", например, так:

internal class JSON
{
    public JSON()
    {
    }

    public string deviceId { get; internal set; }
    public long distance { get; internal set; }
    public DateTime time { get; internal set; }
}

Другой метод без определения класса "JSON", подобный этому:

        string dataBuffer;
        DateTime time = DateTime.UtcNow;
        long inputDistance = 0;
        String deviceId = "MyCSharpDevice";

        dataBuffer = string.Format("{{\"deviceId\":\"{0}\",\"distance\":{1},\"time\":{2}}}", deviceId, inputDistance, time);
        Message message = new Message(Encoding.UTF8.GetBytes(dataBuffer));

        await deviceClient.SendEventAsync(message);

Для отправки сообщений в Azure IoT Hub с использованием протокола HTTP в C # вы можете сослаться на этот официальный пример . Примечание. Официальный образец находится в Консольном приложении, а вы используете фоновое приложение в Windows IoT Core. Типы приложений различны, но использование Azure IoT Hub SDK одинаково.

...