Отображение IP-адреса Intel Galileo на ЖК-дисплее 16x2

Я использую образец ЖК-дисплея 16x2 из Программы разработчика Windows для IoT ( https://ms-iot.github.io/content/16x2 LCD.htm). Какой лучший способ получить и показать IP-адрес Galileo на дисплее вместо "Привет!" сообщение? С уважением.

Код

stdafx.h

#pragma once

#include "targetver.h"

#include <stdio.h>
#include <tchar.h>
#include "arduino.h"
#include "LiquidCrystal.h" // we need this library for the LCD commands

main.cpp

#include "stdafx.h"

int RS = 4;
int ENABLE = 5;
int D0 = 6;
int D1 = 7;
int D2 = 8;
int D3 = 9;
LiquidCrystal lcd = LiquidCrystal(RS, ENABLE, D0, D1, D2, D3); // define our LCD and which pins to use

int _tmain(int argc, _TCHAR* argv [])
{
    return RunArduinoSketch();
}

void setup()
{
    Log(L"LCD Sample\n");

    lcd.begin(16, 2); // need to specify how many columns and rows are in the LCD unit (it calls clear at the end of begin)

    lcd.setCursor(0, 0);
    lcd.print("Hello!");

    lcd.setCursor(0, 1);
    lcd.print(3.14159, 4); // prints a double, the 2nd number is the digits to print after the .
}

void loop()
{
}

2 ответа

Решение

Я бы использовал Windows API для получения IP-адреса в виде строки, а затем использовал lcd.print для печати строки на ЖК-дисплее.

Эта страница MSDN хорошо объясняет и показывает, как использовать API-интерфейсы Windows для получения IP-адреса.

Страница GetAdaptersInfo в MSDN содержит пример кода для получения IP-адреса. Я по существу добавил приведенный ниже код в функцию настройки проекта Galileo и отобразил IP-адрес на ЖК-дисплее:

lcd.begin(16, 2); // columns and rows, LCD unit (it calls clear at the end of begin)
lcd.setCursor(0, 0);

lcd.print("IP Address:");

PIP_ADAPTER_INFO    pAdapterInfo = NULL;
PIP_ADAPTER_INFO    pAdapter = NULL;
ULONG               ulOutBufLen = sizeof(IP_ADAPTER_INFO);
DWORD               dwRetVal = 0;

pAdapterInfo = (IP_ADAPTER_INFO *)MALLOC(sizeof(IP_ADAPTER_INFO));
if (pAdapterInfo == NULL) {
    printf("Error allocating memory needed to call GetAdaptersinfo\n");
}

if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {
    FREE(pAdapterInfo);
    pAdapterInfo = (IP_ADAPTER_INFO *)MALLOC(ulOutBufLen);
    if (pAdapterInfo == NULL) {
        printf("Error allocating memory needed to call GetAdaptersinfo\n");
    }
}

if ((dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)) == NO_ERROR) {
    pAdapter = pAdapterInfo;
    lcd.setCursor(0, 1);
    lcd.print(pAdapter->IpAddressList.IpAddress.String);
}

Я написал сообщение в блоге, в котором показан подход, который я использовал, чтобы заставить его работать. Надеюсь это поможет.

Другие вопросы по тегам