В этом примере показано, как позволить коллбэкам считать данные о синусоиде из Arduino® Uno с помощью tcpserver
интерфейс. Arduino сконфигурирован как клиент TCP/IP и подключения к серверу TCP/IP, созданному в MATLAB® с помощью tcpserver.
Включите Uno Arduino к своему компьютеру. Выполните эти шаги, чтобы соединить Щит Сети W5100 Ethernet с Uno Arduino и с вашим сетевым маршрутизатором или сетевым адаптером на компьютере.
Поместите Щит Ethernet твердо в Uno Arduino.
Используйте кабель RJ45, чтобы соединить Щит Ethernet Arduino с одним из следующего:
Сетевой маршрутизатор, который предоставляет Интернет вашему компьютеру.
Сетевой адаптер на вашем компьютере.
Идентифицируйте IP-адрес маршрутизатора или сетевого адаптера, с которым соединяется Щит Ethernet Arduino. Задайте этот IP-адрес в программе Arduino в Программе Загрузки на разделе Arduino Uno. Вы также используете этот IP-адрес в качестве входного параметра для tcpserver
в разделе Create the Server.
Загрузите следующую программу на Uno Arduino с помощью IDE Arduino. Эта программа выписывает 250 значений плавающих синусоиды.
/* TCPIPClient Write sine wave data values to the tcpserver object created in MATLAB. */ #include <SPI.h> #include <Ethernet.h> // Specify the MAC address printed on the Ethernet shield. // If no MAC address is printed, then use the address shown below. byte mac[] = {0xDE,0xAD,0xBE,0xEF,0xFE,0xED}; // Specify the server IP address that is used to create the tcpserver object in MATLAB. // This is the IP address of the router or network adapter that the Arduino Ethernet Shield is connected to. // In this example, 192.168.1.81 is the IP address for the server. IPAddress server(192,168,1,81); // Set the static IP address for the Arduino Ethernet Shield to act as a TCP/IP client. // Choose an IP address that is in the same subnet or private network as the server IP address. // In this example, 192.168.1.177 is the IP address for the Arduino Ethernet Shield. It is in the same subnet as the server IP address. IPAddress ip(192,168,1,177); IPAddress myDns(192,168,1,1); // Ethernet client library. EthernetClient client; // Command sent by the server. byte command; // Sine wave data buffer. float sineWaveBuffer[250]; // The setup routine runs once when you press reset. void setup() { // Initialize serial communication. Serial.begin(9600); while (!Serial) { ; // Wait for serial port to connect. } Ethernet.begin(mac,ip,myDns); Serial.print("Manually assigned the following IP address to the Arduino:"); Serial.println(); Serial.println(Ethernet.localIP()); // Check for Ethernet hardware. if (Ethernet.hardwareStatus() == EthernetNoHardware) { Serial.println("Ethernet shield was not found."); } // Check for Ethernet cable connection. if (Ethernet.linkStatus() == LinkOFF) { Serial.println("Ethernet cable is not connected."); } Serial.print("Attempting connection to "); Serial.print(server); Serial.println("..."); // Attempt to connect to the server running at IP address 192.168.1.81 and port 5000. if (client.connect(server,5000)) { Serial.print("Connected to server running at "); Serial.println(client.remoteIP()); } else { Serial.println("Connection to server failed."); } // Store sine wave data as 250 float values. for (int j = 0;j < 250;j++) { sineWaveBuffer[j] = sin(j*50.0/360.0); } } // Main processing loop void loop() { // Block until data is sent by server. if (client.available() > 0) { // Read the command sent by the server. command = client.read(); // Print the command sent by the server. Serial.println("The server sent the following command:"); Serial.println(command); if (client.connected() && command == 1) { // Write sine wave data to the server. client.write((const uint8_t *) & sineWaveBuffer, sizeof(sineWaveBuffer)); } } }
Создайте tcpserver
экземпляр с помощью IP-адреса маршрутизатора или сетевого адаптера.
В этом примере IP-адресом является 192.168.1.81
и номером порта является 5000
. Этот IP-адрес должен быть тем же заданным в программе Arduino.
server = tcpserver("192.168.1.81",5000)
server = TCPServer with properties: ServerAddress: "192.168.1.81" ServerPort: 5000 Connected: 0 ClientAddress: "" ClientPort: [] NumBytesAvailable: 0 Show all properties, functions
tcpserver
Объект получить данныеУстановите ConnectionChangedFcn
свойство к @requestDataCommand.
Функция обратного вызова requestDataCommand
инициирован, когда Arduino соединяется с tcpserver
объект.
server.ConnectionChangedFcn = @requestDataCommand;
Создайте функцию обратного вызова requestDataCommand
это отправляет uint8 значение 1 как команда, чтобы запросить Arduino отправить данные.
function requestDataCommand(src,~) if src.Connected % Display the server object to see that Arduino client has connected to it. disp("The Connected and ClientAddress properties of the tcpserver object show that the Arduino is connected.") disp(src) % Request the Arduino to send data. disp("Send the command: 1") write(src,1,"uint8"); end end
Установите BytesAvailableFcnMode
свойство к "byte
", BytesAvailableFcn
свойство к @readArduinoData,
и BytesAvailableFcnCount
свойство к 1 000.
configureCallback(server,"byte",1000,@readArduinoData);
Функция обратного вызова readArduinoData
инициирован, когда 250 плавающих точек данных синусоиды (1 000 байтов) доступны, чтобы быть считанными из Arduino.
Создайте функцию обратного вызова readArduinoData
это читает 250 точек данных синусоиды и строит результат.
function readArduinoData(src,~) % Read the sine wave data sent to the tcpserver object. src.UserData = read(src,src.BytesAvailableFcnCount/4,'single'); % Plot the data. plot(src.UserData) % Clear any other remaining data sent by the Arduino. flush(src); end