查看: 5980|回复: 2

在pcDuino上通过TCP/IP Socket控制Linker LED

[复制链接]
  • TA的每日心情
    郁闷
    2013-6-3 09:22
  • 签到天数: 29 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2013-5-8 13:05:56 | 显示全部楼层 |阅读模式
    分享到:
    很多用户对TCP/IP sockets 编程能否用于Arduio-ish C环境抱有疑问,答案是肯定的,与Arduino相比,也不需要再用其他WiFi Shield 或者Ethernet shield。
    下面介绍的是如何通过socket通信实现pcDuino控制LED灯,10mm的绿色LED灯以及proto shield,接线图如下:
    EA47605C09814F3192629471B2B3BCF7.png

    要在pcDuino上建立TCP/IP socket 服务器,从客服端接收信息执行连接。当收到字符"O"时,灯亮;当收到字符 "F"时,灯灭,收到其它指令时不作出反应。
    首先需要先获取pcDuino APIhttp://www.github.com/pcduino/c_enviroment
    程序代码:
    1. /*
    2. * LED test program
    3. * The LED will be controlled by TCP socket
    4. * This program serves an example of TCP socket server
    5. *
    6. *The TCP socket code is adpoted from : http://www.thegeekstuff.com/2011/12/c-socket-programming/
    7. *
    8. * Please use linker kit LED module,and install it on D2 D3 V G postion
    9. *
    10. * Jingfeng Liu
    11. *
    12. * 5/4/2013
    13. *
    14. */

    15. #include <sys/socket.h>
    16. #include <netinet/in.h>
    17. #include <arpa/inet.h>
    18. #include
    19. #include
    20. #include
    21. #include
    22. #include
    23. #include <sys/types.h>
    24. #include

    25. #include

    26. int led_pin = 2;

    27. int listenfd = 0, connfd = 0;
    28. int n;
    29. struct sockaddr_in serv_addr;

    30. char sendBuff[1025];
    31. time_t ticks;

    32. void setup()
    33. {

    34. led_pin = 2;

    35. pinMode(led_pin, OUTPUT);

    36. listenfd = socket(AF_INET, SOCK_STREAM, 0);
    37. memset(&serv_addr, '0', sizeof(serv_addr));
    38. memset(sendBuff, '0', sizeof(sendBuff));

    39. serv_addr.sin_family = AF_INET;
    40. serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    41. serv_addr.sin_port = htons(5000);

    42. bind(listenfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr));

    43. listen(listenfd, 10);

    44. connfd = accept(listenfd, (struct sockaddr*)NULL, NULL);

    45. }

    46. void loop()
    47. {

    48. // ticks = time(NULL);
    49. // snprintf(sendBuff, sizeof(sendBuff), "Jingfeng Liu%.24s\r\n", ctime(&ticks));
    50. // write(connfd, sendBuff, strlen(sendBuff));

    51. n = read(connfd, sendBuff, strlen(sendBuff) );

    52. if(n>0)
    53. {
    54. if(sendBuff[0]=='O') digitalWrite(led_pin, HIGH); // set the LED on
    55. if(sendBuff[0]=='F') digitalWrite(led_pin,LOW); // set the LED off
    56. }

    57. // close(connfd);
    58. // sleep(1);

    59. }
    复制代码
    源文件 tcpip_led_test可以在目录 c_enviroment/sample里下载
    在c_enviroment/sample里修改Makefile加入新的源文件:

    1. DIR=$(shell pwd)/../

    2. INCS = -I.\
    3. -I$(DIR) \
    4. -I$(DIR)/hardware \
    5. -I$(DIR)/hardware/arduino \
    6. -I$(DIR)/hardware/arduino/cores \
    7. -I$(DIR)/hardware/arduino/cores/arduino \
    8. -I$(DIR)/hardware/arduino/variants \
    9. -I$(DIR)/hardware/arduino/variants/sunxi \
    10. -I$(DIR)/libraries \
    11. -I$(DIR)/libraries/Serial \
    12. -I$(DIR)/libraries/SPI \
    13. -I$(DIR)/libraries/Wire \
    14. -I$(DIR)/libraries/LiquidCrystal \
    15. -I$(DIR)/libraries/PN532_SPI

    16. LIBS=../libarduino.a
    17. TARGET=../output/test

    18. OBJS = <strong>tcpip_led_test</strong> io_test adc_test pwm_test spi_test adxl345_test serial_te
    19. st liquidcrystal_i2c liquidcrystal_spi interrupt_test tone_test
    20. OBJS += linker_led_test linker_potentiometer_test linker_tilt_test linker_light_
    21. sensor_test linker_button_test
    22. OBJS += linker_touch_sensor_test linker_magnetic_sensor_test linker_temperature_
    23. sensor_test linker_joystick_test
    24. OBJS += linker_rtc_test linker_sound_sensor_test linker_buzzer_test linker_hall_
    25. sensor_test linker_led_bar_test linker_relay_test
    26. OBJS += pn532_readAllMemoryBlocks pn532readMifareMemory pn532readMifareTargetID
    27. pn532writeMifareMemory

    28. all:
    29. @mkdir -p $(TARGET)
    30. for i in $(OBJS); do echo "$(CXX) $(INCS) $$i.c -o $(TARGET)/$$i $(LIBS)
    31. "; done
    32. @for i in $(OBJS); do $(CXX) $(INCS) $$i.c -o $(TARGET)/$$i $(LIBS); don
    33. e

    34. clean:
    35. @for i in $(OBJS); do rm -f $(TARGET)/$$i; done
    复制代码

    编译,运行 ‘$make’
    1. /c_enviroment/output/test$ ./tcpip_led_test
    复制代码
    在另外一台pc上安装 TCP/IP Client,向pcDuino上的服务器发送数据,TCP客服端如下图:
    791472A900424532B082C9C3C9240F6D.png
    这样就可以通过TCP客服端发送字符指令来控制LED灯了

    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-15 09:28
  • 签到天数: 222 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2013-5-8 13:36:26 | 显示全部楼层
    pcDuino的模块好丰富啊!!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2013-6-3 09:22
  • 签到天数: 29 天

    连续签到: 1 天

    [LV.4]偶尔看看III

     楼主| 发表于 2013-5-9 10:08:37 | 显示全部楼层
    奋斗哥 发表于 2013-5-8 13:36
    pcDuino的模块好丰富啊!!!

    这个主要是socket协议的应用 模块扩展应用确实蛮多
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /5 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-12-20 16:44 , Processed in 0.128342 second(s), 20 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.