Creative Commons images are CC BY-NC-SA 3.0

Description: Every super spy has a small compact camera at their disposal just to get the advantage on the bad guy and though you may not be a “00” this high res TTL camera still has plenty of uses! LinkSprite’s latest JPEG Color camera module can capture high resolution pictures and transport them over TTL serial, making it perfect for embedded applications. This a very simple camera module with great user applications and can be incorporated into almost any project with ease.

Each one of these camera modules is capable for taking single 2MP JPEG images, offering a maximum frame rate of 1600x1200 at 15fps, with a max 115200 baud rate. All that is required to power these little guys is a 5VDC supply at 80-100mA (max 120mA).


  • Module: 36.6 x 32 x 27.6 mm
  • Cable: ~210mm L


  • 1600x1200 / 1280x960 / 1024x768 / 800x600 / VGA / QVQAF / 160x120 resolution
  • Support capture JPEG from serial port
  • Default baud rate of serial port is 115200
  • DC +5V (+/-5%) power supply
  • Current consumption: 80-100mA (max 120mA)


Recommended Products

Customer Comments

  • Can you post a sample image at full rez so we can see if this thing is worth $55 bucks?

  • Just thought I’d provide a quick write-up of this module based on several weeks now of trying to get it to work well. Most of that time was spent fussing with code to handle the serial transmissions (between an Arduino and the camera, and between my Macbook and the Arduino) to transmit JPEGs to my Mac.

    Getting the camera to take pictures is relatively easy, although the sample code provided in the wiki is a bit of a mess. I’ll work on a blog post with my sample code.

    I was very disappointed in the image quality. I was hoping for quality that would rival a low-end 2MP (1600x1200) consumer camera. However, the color quality is so bad you’d almost mistake it for a black-and-white camera, and there is significant spatial distortion at the edges of the frame. For example, here’s a high-res photo taken with the Linksprite and here is essentially the same photo taken with my iPhone. You can see they’re not even close.

    If you do get this, be sure to use the User Manual linked on this page, which is different than the one in the product wiki. The latter is out of date and wrong. The correct manual gives instructions for changing the exposure and IR mode on the camera. I was hoping that changing the IR mode would improve the color quality, but I couldn’t get it to work at all.

    I also couldn’t fetch images from the camera (via the Arduino) at anything above 38400 baud, which made for pretty slow image transfer, but that might not have been the camera’s fault.

    • Thank you for posting a write up especially posting up sample photos - definitely helps when choosing embedded cameras such as this. Also, your issue with not being able to fetch images at any baud higher than 38400 - were you using sofwareserial? I believe 38400 is the highest stable baud rate you can achieve with the software serial port. Just a thought. I may be wrong so someone please chime in if so.

  • 1600x1200 at 15fps through a serial link with a max 115200 baud rate?…no way

  • I’ve been working on getting this working with an Arduino and Openlog. I believe I’ve taken a picture and I now have a massive string saved to the Openlog starting with the characters FF D8 and ending with FF D9. But I can’t seem to convert this text to an actual image. I suppose the image has been encoded into JFIF. How could I now convert this to an actual jpeg that I can view?

  • This is a 2MP CMOS camera.

  • I’m running an mbed board with a serial connection on pins PTC3 (rx) and PTC4 (tx). I’m sending the commands out as I see in the manual on the tx pin (connected to rx pin of camera), however, I never get the “ACK command” back on the rx line (connected to tx pin of camera)? Are the commands in Hex or Decimal or something else? Any suggestions on how to get the camera to acknowledge?

    • The commands are definitely in hexadecimal. Make sure that you are sending them out as such. For example 56 on the datasheet is 56 in hexadecimal or 0x56.

  • For about $20 more, this basic digital camera does 20.1 megapixel stills, 720p video at 30fps, etc, etc, etc… Included in that price is a >~1000mAh battery, 2.7" LCD, the plastic enclosure, etc, etc, etc…

    How then, does this slower and lower-fidelity camera with no storage, lights, usb, etc, etc, maintain this price? Not intended as a dig at sparkfun, because I find no significantly better and/or cheaper cameras available.

    Where does one purchase the comparatively well-featured cameras they put in every ~$20 cell phone nowadays? I realize the phone manufacturers buy 1000000000000 cameras at a time but even with adding the onboard encoder to make the camera ‘standalone’, the price-feature ratio seems way off.

    Could you not (summarizing) add a <$20 SD sniffer to the above BestBuy camera and outperform this in every way? Besides being tiny and low-power, please spell out for me where the value in this is?


    • That’s a hard one to answer, but I’ll try. A lot of it really is scale, and that Sony is buying/making a lot of these, and can therefor do so much cheaper. But a lot of it is that these are very different devices. The Sony camera is great if you are on a family vacation and just want to take pictures, but not very good if you want to build a system to automatically take and email you pictures every time your fridge opens. Even with an SD sniffer you still don’t have direct control of the camera module. For hobbyists building their own device, this is really the missing piece. Different markets and different pricing.

    • Agreed, there definitely is a market for a cheap serial cmos camera with jpeg compression / video at a resonable transmission rate. Surprised Adafruit/Sparkfun/etc havn’t gotten something going yet.

  • The section of code that seems to be some of the most important is relatively unexplained:

    void SendReadDataCmd(){

    This code works as long as low is less then 255 of course because of byte size. However I have been unable to make the chunk size something larger like 512 without it breaking mainly because I don’t understand what is functionally happening and what real maths need to happen for mh and ml. When I change the i+= section to the full chunk size (512 for example) this also doesn’t work.

    How can I get information on this statement for communicating with the camera. The section in the documentation says:

    Returning Bytes: 56 00 32 0c 00 0a 00 Addr2 Addr1 Addr0 00 Data2 Data1 Data0 00 0a
    Addr2 Addr1 Addr0 is start Addr of the package
    Data2 Data1 Data0 is package Size package Size is a multiple of 8

    Alright so… if package size is 512 how do I express that in two bits and how do I calculate Addr2 Addr1 Addr0

  • Can someone please tell me what MH and ML represent in the code and subsequently what purpose they serve in the SendReadData command? I’ve pretty much mastered this camera but this is stumping my final hurdle!

    • MH and ML are the range of bytes to be read from the image. Check out this library, it was the best I could find on the googles.

  • Can any one help me to build a camera like this?

    • 1080P

    • can use the WiFi module as the following. Or other way to use WiFi to link to the camera. I just want the camera to link outside with WiFi connection, but I don’t want the serial cable connection between the camera and WiFi module, other connection is fine.

    Please let me know if you know how to make it. Thank you very much. My email is

  • FWIW I thought I would pass along that I have been able to get this camera to work with a Due, saving the image to SD and/or processing it in memory as needed.

    Note that the documentation suuuuuuuuucks and some settings such as cranking up the image size or dialing down the compression seem to blow the poor things tiny mind, requiring a reset.

  • As no response from SF contradicting the statements done I fear they may be true……

    • We try to monitor the comments but things slip through! If you have specific questions about a product and the comments haven’t answered it, I recommend emailing techsupport@sparkfun. They’ll be able to help you out.

  • I have one of the earlier models and it does work, just not to any of the clained perforamce levels. Perhaps Sparkfun Live could incorporate this device into a project where the real device get demonstarated.

  • When they say “..can capture high resolution pictures and transport them over TTL serial, making it perfect for embedded applications.” do they mean serial out to a PC for display or how else can JPEG format be used in an embedded application?

  • Is there any way to get raw pixel data from the camera? The manual and wiki do not mention raw, only JPEG, I believe.

  • Anyone know what chip is behind that “QC PASSED” sticker?

    • The same chip that is behind this QC sticker. I know its not a 2MP … this is a newer CMOS on it. But looks very similar

      • This new 2MP LinkSprite has a 64-pin processing chip with an external 4Mbit SRAM (IS61LV5128AL-10TLI). The previous VGA LinkSprite module you’ve linked to has a processor with many more pins and no external memory. The new 2MP LinkSprite could use the same/a similar processor in a different package, but I bet a new processor is being used. If SF or someone with their hands on one wouldn’t mind peeling off the sticker, I’d love to hear the processor part number. Or Piotr, were you being sarcastic?


        • Yea a little bit sarcastic really. Just annoyed that the specs given here are misleading. If this can truly do 15FPS @ 2MP over UART.. then yea.. I retract my sarcasm and apologise.. but I seriously doubt it and it makes me fume a bit.

      • I’m not sure thats the same chip. The one in the link you provided has more pins than this one and the crystal in on different pins between the two.

        • This 2MP most likely has a newer version of what’s on there. That is likely because this module has a dedicated SRAM module to deal with larger buffer, while the older version had a buffer built into the chip. The specs are very similar (except this is higher res) but the rest looks very similar.

  • “ maximum frame rate of 1600?0x1200 at 15fps” ?? Does that mean like MJPG at 1600x1200 @ 15FPS? I dont understand that. THe user manual says “160x120 preview @8bpp with 0.75~6 fps” - Come on guys, you just shoving some cheap chinese crap on here now.oh wait £32 - Thats seems a bit to expensive for my liking! You can get better modules (not UART) but still.

    • Hm, yes, there seems to be an issue.

      Does that mean like MJPG at 1600x1200 @ 15FPS?

      Some assumptions:

      • Camera outputs a 1600x1200 frame in color, 8 bit/pixel (likely YUV 4:2:2 format)
      • Therefore: 1 frame is 1600x1200x8 bits or 1.92 MBytes (aka ~2MP @8bpp).
        Note: No file system here so 1,000,000B = 1,000kB = 1MB
      • JPEG compression varies drastically based on a lot of factors, but let’s say we do really well and JPEG compression brings us from ~2MB uncompressed down to 50kB.

      [formatting seems broken here]

      A theoretical 1600x1200 JPEG stream at 15fps with 50kB per frame
      Units can get confusing very quickly, so step-by-step:

      • 50kB/frame at 15fps
      • 50kB/frame x 1000 bytes/kB x 8 bits/byte at 15fps
      • 400,000 bits/frame at 15fps
      • 6,000,000 bits/s (aka 6,000,000 baud)
      • 6Mbps

      According to the User Manual PDF the maximum baud rate is 256000 baud, and the product description says max 115200 baud. In either case, we still come up short by at least an order of magnitude (data output is >10x more than our transfer speed).

      Maybe not fully Q.E.D., but I concur that there’s likely no way this module can output 1600x1200 JPEGs at 15fps.

      • Given the way the baud command is set up, I strongly suspect that it can go faster, if you find the right value. It looks like it’s a standard divider-style, though probably with some extra bit stuffed in there since faster baud rates seem to be in a separate range. Of course, when they list the same value (0xAE) for both 9600 baud and 128000baud, I’m guessing that anybody looking to speed it up will just have to try a bunch of values and measure what comes out to derive the appropriate formula.

        There’s still no chance this thing will ever actually capture 1600x1200x15fps and be able to send it anywhere…

  • This line of text may be incorrect:

    16000x1200 at 15fps

    Though this is what is on the wiki.

Customer Reviews

No reviews yet.